信号量和内存排序

semaphore and memory ordering

C++20 中的 std::counting_semaphore 是否表现得像互斥/原子操作? semaphore.acquire()获取操作(关于内存排序),semaphore.release()是释放操作吗?

获取和释放内存操作最终定义了执行之间的“先发生”关系,正是“先发生”关系允许观察副作用。

counting_semaphore::release 通过 just declaring that 绕过 acquire/release 语义 release 调用“强烈发生在”任何 try_acquire 之前(所有形式的 acquire 建立在) 上观察这个 release 语句的效果。

Strongly happens before invocations of try_­acquire that observe the result of the effects.

因此,这提供了 acquire 所需的所有同步,以便能够观察 release 调用的副作用。