counting_semaphore<X>::acquire()是否自带内存屏障?无需额外原子线程栅栏?
counting_semaphore内存屏障相关问题解答
counting_semaphore<X>::acquire()自带memory_order_acquire语义的内存屏障,完全无需额外调用atomic_thread_fence(memory_order_acquire)。当线程通过acquire()获取到信号量后,其他线程中在release()操作之前的所有内存写入,都会对当前线程可见,完全符合acquire屏障的同步要求。counting_semaphore<X>::release(n)包含memory_order_release语义的内存屏障,不需要额外调用atomic_thread_fence(memory_order_release)。调用release()时,当前线程中所有在release()之前的内存写入,都会同步给后续通过acquire()获取信号量的线程,满足release屏障的同步规则。
内容的提问来源于stack exchange,提问作者Edison von Myosotis
相关产品推荐
相关产品推荐

