两个线程的公共资源-同步足够了吗?

冰火

假设我有某种性质的课。我想在线程之间共享此类的对象。在过去,我曾想过,mutex尽管这可能不是最有效的方法,但足以确保一切正常。

现在,我已经读了一些有关std::atomic,即使对于简单的bool引用也是有必要的:是否必须对“ exit” bool变量使用atomic <bool>?

虽然我理解了为什么布尔应该是原子的,但我不明白简单的互斥锁如何防止以下问题:

其次,当两个线程在不同的内核上运行时,它们具有单独的缓存;写入值会将其存储在缓存中,但不会更新其他缓存,因此一个线程可能看不到另一个线程写入的值。

互斥锁不仅是一种确保其他线程无法锁定该互斥锁的机制吗?但是在互斥锁区域中,我可能会玩很多变量。编译器可能不知道涉及哪些变量。

因此,对我而言,仅在包含共享资源的所有区域周围放置基于互斥锁的锁似乎还不够。难道两个线程没有此资源的不同版本,因为线程缓存只是不会被更新吗?

用户名

C ++存储模型保证,如果一个线程中的对象更改受到互斥锁的保护,则其他线程可以看到它们。有关详细信息,请参见http://en.cppreference.com/w/cpp/language/memory_model

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章