Crate mc_sgx_sync

source ·
Expand description

MobileCoin: Synchronization primitives for SGX enclaves

Project ChatLicenseTargetCrates.ioDocs StatusDependency Status

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.

Examples

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

Developer Notes

The modules are implemented to mimic the layout of std::sync.

module hierarchy

  • 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.

Structs

A Condition Variable
A mutual exclusion primitive useful for protecting shared data
An RAII implementation of a “scoped lock” of a mutex. When this structure is dropped (falls out of scope), the lock will be unlocked.
A type of error which can be returned whenever a lock is acquired.
A reader-writer lock
RAII structure used to release the shared read access of a lock when dropped.
RAII structure used to release the exclusive write access of a lock when dropped.

Enums

An enumeration of possible errors associated with a TryLockResult which can occur while trying to acquire a lock, from the try_lock method on a Mutex or the try_read and try_write methods on an RwLock.

Type Definitions

A type alias for the result of a lock method which can be poisoned.
A type alias for the result of a nonblocking locking method.