来自C++20的std::counting_semaphore
的行为是否类似于互斥/原子操作?即semaphore.acquire()
是获取操作(关于内存排序)吗,semaphore.release()
是释放操作吗?
获取和释放内存操作最终定义了执行之间的“发生在之前”关系,而正是“发生在之前”关系允许观察副作用。
counting_semaphore::release
通过声明release
调用“强烈发生在”任何try_acquire
(所有形式的acquire
都是基于它构建的)观察此release
语句的效果的try_acquire
语句之前,从而绕过了acquire/release语义。
在调用try_acquire
以观察效果的结果之前强烈发生。
这样就提供了acquire
所需的所有同步,以便能够观察到release
调用的副作用。