Crates.io | mc-sgx-sync |
lib.rs | mc-sgx-sync |
version | 0.1.0 |
source | src |
created_at | 2023-02-01 23:36:23.403781 |
updated_at | 2023-02-01 23:36:23.403781 |
description | Synchronization primitives for SGX enclaves |
homepage | |
repository | https://github.com/mobilecoinfoundation/sgx-std |
max_upload_size | |
id | 774373 |
size | 58,991 |
Synchronization primitives for SGX enclaves.
The available primitives are meant to mimic the behavior of std::sync. Only the primitives whose behavior can be supported in SGX enclaves are supported.
To have code that works with both std::sync and mc-sgx-sync.
#[cfg(feature = "sgx")]
use mc_sgx_sync::Mutex;
#[cfg(not(feature = "sgx"))]
use std::sync::Mutex;
let mutex = Mutex::new(5);
{
let mut data = lock.lock().unwrap();
*data += 1;
assert_eq!(*data, 6);
} // lock is dropped here
The modules are implemented to mimic the layout of std::sync.
The modules that define the public API are more or less copies from the rust source at commit 606c3907 with unsupported behavior removed. This ensures that clients can jump back and forth between the std::sync types and the supported mc-sgx-sync types.
The mc-sgx-sync::sys
modules mimic the modules in the
rust source. The sys
modules in the
rust source are per operating system
or platform.
mc-sgx-sync only supports
SGX enclaves, but maintaining the sys
layout reduces modifications to the
public API modules.
mc-sgx-tstdc provides rust wrappers around the C implementation of the synchronization primitives.
mc-sgx-sync could depend on
mc-sgx-tstdc-sys
and call the C implementation directly. This is how many of the sys
modules in
the rust source are implemented. The
choice to depend on
mc-sgx-tstdc was made to be
consistent with the use of other mc-sgx-<lib_wrapper>-sys
crates. The
mc-sgx-<lib_wrapper>
crates provides idiomatic rust interfaces over the C API
and are usually the only crates that directly depend on the
mc-sgx-<lib_wrapper>-sys
crates.