【发布时间】:2020-07-16 06:40:04
【问题描述】:
例如,有 8 个线程使用 uint64 作为共享内存,并在该区域使用不同的字节(无锁)。
一个线程只能访问某个字节,所以不存在字节争用。
在这种情况下,安全吗?而且从性能的角度来看,使用CAS来操作整个整数而不是每个字节更好吗?
【问题讨论】:
-
C++ 按对象的顺序处理线程安全,而不是“内存中的字节”。如果多个线程正在访问同一个对象,那么就会存在数据竞争,即使它们使用屏蔽来仅访问“不同的字节”。请提供minimal reproducible example,以便我们查看您的操作是否安全。
-
请出示minimal reproducible example,答案可能是否定的,这不安全
-
魔鬼在我耳边低语:“union”。
-
我可以推荐一本书“concurrency in action”,它非常详细地解释了这一点。
标签: c++ multithreading