信号量和内存排序
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
调用的副作用。
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
调用的副作用。