nsync 是一个 C 库,它导出了各种同步原语:锁、条件变量、一次性初始化、可等待计数器(用于屏障)和可等待位(用于取消或其他条件)。它不是 Google 的官方产品。
在某些情况下, nsync 可能是替代 pthread 原语的好选择:
- nsync 锁是读写锁 (但效率与互斥锁相同)。
- nsync 锁和条件变量每个只占用两个单词。
- nsync 可在 Unix 类型系统和 Windows 上使用。 它可以直接移植到其他平台。
- nsync 提供了条件临界区。 它们与条件变量具有相同的作用, 但通常更容易使用, 在大多数常见情况下, 速度也相媲美。 它们可以通过以下两种方式更容易使用:
- 不需要在"等待"操作中包含 while 循环; 相反, 条件作为函数和任意指针参数传递给调用。
- 当条件变为真时, 不需要明确唤醒或发送信号; 它们会自动检查。
- 主要缺点是:
- 它们在大多数其他常用同步 API 中都不支持, 因此可能不熟悉 (尽管它们可以追溯到 1960 年代)。
- 如果线程经常在与同一锁相关的多个不同的、不成立的条件上等待, 它们可能比条件变量慢。 在此情况下, 客户端可以按照正常方式使用条件变量; 条件临界区和条件变量可以与同一锁一起使用。
- 不同于 pthread 模型中的线程取消, nsync 等待可以通过传递给等待调用的对象来取消。 此差异在计算需要多个线程时或取消仅影响线程执行的较大操作中的子操作时可能很有用。
请参见下面的 "对锁和条件变量的扩展" 部分。
可移植性 =================== 该库旨在可移植,并且可以在仅配备 C90 编译器的系统上编译,假设编译器、操作系统或汇编程序提供了原子操作。 它能够使用