5 个不稳定版本

使用旧的 Rust 2015

0.3.1 2020 年 2 月 26 日
0.3.0 2019 年 9 月 14 日
0.2.0 2018 年 5 月 15 日
0.1.1 2018 年 5 月 12 日
0.1.0 2018 年 5 月 12 日

#868 in 并发

Apache-2.0

14KB
220

semalock

Crates.io Crates.io Travis

semalock 是一个 Rust 库,用于以高效的方式控制 POSIX 操作系统上文件的并发访问。

它结合使用 POSIX 命名信号量和独占文件锁,以安全高效地获取对文件的独占访问。在 Linux 上观察到特别高效,在 8192 个进程的情况下,锁定开销低于 CPU 时间的 5%。

用法

以下展示了 semalock 的用法。此程序打开 /some/file 并向其中追加一些文本。尝试使用 GNU parallel 来衡量多个竞争进程之间的性能。

// 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())
        .and_then(|_| lock.file.write(b"hello world\n"))
});

支持的操作系统

以下操作系统已进行测试

  • GNU/Linux 4.16

以下操作系统尚未进行测试但应能工作

  • FreeBSD
  • GNU/Linux 2.6+
  • macOS 10.4+
  • NetBSD
  • OpenBSD

支持的操作系统必须支持以下功能

  • flock
  • sem_get_value
  • sem_open
  • sem_post
  • sem_timedwait
  • sem_unlink

以下将无法工作

  • Windows NT

发布说明

0.3.1 - 2020-02-25

  • 修复 x86 上的编译错误

0.3.0 - 2019-09-13

  • Semalock::with 现在接受 FnOnce 而不是 Fn
  • 各种项目卫生更改

0.2.0 - 2018-05-14

  • 首次发布。

开发者说明

要运行测试,请执行以下命令

cargo test

要发布创建项,请执行以下操作

  1. 编辑 Cargo.toml,适当地提高版本号。
  2. 编辑 README.md,在发布说明中添加条目。
  3. 提交这些更改并将其推送到 master
  4. 创建并推送一个以 "v" 开头的标签 - 例如 "v0.4.0"

作者

Jason Longshore [email protected]

依赖项

~2–10MB
~108K SLoC