semalock

Crates.io Crates.io Travis

semalock is a Rust library for controlling concurrent access to files on POSIX operating systems in an efficient manner.

It uses a combination of POSIX named semaphores and exclusive file locks to safely and efficiently acquire exclusive access to a file. This has been observed to be particularly efficient on Linux, with under 5% of CPU time spent on lock overhead with 8192 processes.

Usage

The following shows usage of semalock. This program opens /some/file and appends some text to it. Try it with GNU parallel to measure performance amongst multiple competing processes.

```rust // Acquire and open a file and semaphore let mut lock = Semalock::new(Path::new("/some/file"));

// Do some stuff to the file lock.with(|lock| { lock.file .seek(SeekFrom::End()) .andthen(|| lock.file.write(b"hello world\n")) }); ```

Supported Operating Systems

The following operating systems have been tested:

The following operating systems have not been tested but should work:

Supported operating systems must support provide the following:

The following will not work:

Release Notes

0.3.0 - 2019-09-13

0.2.0 - 2018-05-14

Developer Notes

To run the tests, execute the following:

bash cargo test

To release the create, perform the following:

  1. Edit Cargo.toml, bumping the version as appropriate.
  2. Edit README.md, adding an entry to the Release Notes, and updating the TOML snippet's version.
  3. Commit these changes and push them to master.
  4. Create and push a tag that starts with "v" -- e.g. "v0.4.0"

Author

Jason Longshore hello@jasonlongshore.com