如何为线程消毒器注释 seq-cst 原子栅栏?
How do I annotate seq-cst atomic fences for the thread sanitizer?
我了解到 ,要修复它,您需要告诉 TSAN 哪些原子变量受栅栏影响,方法是在它旁边放置 __tsan_acquire(void *)
和 __tsan_release(void *)
(分别用于获取和释放围栏)。
但是 seq-cst 围栏呢?据我了解,它们比 acq-rel 围栏更严格,所以 acq-rel 注释可能还不够?
我不太熟悉不同的内存顺序,所以我可能遗漏了一些东西。
@dvyukov 在 Github confirmed __tsan_acquire
+__tsan_release
检测(与 acq-rel 围栏相同)应该足够了。
我不确定这是否意味着 TSAN 通常不区分 seq-cst 和 acq-rel 操作。
我了解到 __tsan_acquire(void *)
和 __tsan_release(void *)
(分别用于获取和释放围栏)。
但是 seq-cst 围栏呢?据我了解,它们比 acq-rel 围栏更严格,所以 acq-rel 注释可能还不够?
我不太熟悉不同的内存顺序,所以我可能遗漏了一些东西。
@dvyukov 在 Github confirmed __tsan_acquire
+__tsan_release
检测(与 acq-rel 围栏相同)应该足够了。
我不确定这是否意味着 TSAN 通常不区分 seq-cst 和 acq-rel 操作。