我了解到TSAN 不理解std::atomic_thread_fence
,要修复它,您需要告诉 TSAN 哪些原子变量受围栏影响,通过放置__tsan_acquire(void *)
和__tsan_release(void *)
旁边(分别用于获取和释放围栏)。
但是 seq-cst 栅栏呢?据我了解,它们比 acq-rel 围栏更严格,所以 acq-rel 注释可能还不够?
我对不同的内存顺序不太熟悉,所以我可能会遗漏一些东西。
我了解到TSAN 不理解std::atomic_thread_fence
,要修复它,您需要告诉 TSAN 哪些原子变量受围栏影响,通过放置__tsan_acquire(void *)
和__tsan_release(void *)
旁边(分别用于获取和释放围栏)。
但是 seq-cst 栅栏呢?据我了解,它们比 acq-rel 围栏更严格,所以 acq-rel 注释可能还不够?
我对不同的内存顺序不太熟悉,所以我可能会遗漏一些东西。
Github 上的@dvyukov确认__tsan_acquire
+__tsan_release
工具(与 acq-rel 围栏相同)应该足够了。
我不确定这是否意味着 TSAN 通常不区分 seq-cst 和 acq-rel 操作。