Crate heliograph

Source
Expand description

Safe bindings to System V semaphore sets

Note that these bindings will not work properly with semaphores that are not handled by heliograph. Even though it will not result in Undefined Behavior, it may result in unwanted results: semaphore sets handled by this library do not actually have nsems semaphores, but nsems + 1, where the additional one is used to track the reference count of the semaphore.

§Examples

let file = tempfile::NamedTempFile::new().unwrap();
let key = Key::new(file.as_ref(), NonZeroU8::new(b'a').unwrap()).unwrap();
let sem = Semaphore::create(key, 1, Exclusive::No, Mode::from_bits(0o600).unwrap()).unwrap();
let sem = Arc::new(sem);
{
    let sem = sem.clone();
    std::thread::spawn(move || {
        // Wait until the semaphore gets increased
        sem.op(&[sem.at(0).remove(1)]).unwrap();
    });
}
sem.op(&[sem.at(0).add(1)]).unwrap();
// Here the thread above is unblocked

Re-exports§

Structs§

  • Key, used for referencing a semaphore: two semaphores built with the same key will be the same
  • A semaphore on which one can do an operation
  • A semaphore operation, to be used in Semaphore::op
  • A System V semaphore set

Enums§

  • Whether the semaphore opening should fail if it does not create the semaphore set as requested