gpt4 book ai didi

c++ - 两个线程的公共(public)资源 - 足够同步了吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:00 26 4
gpt4 key购买 nike

假设我有一些类,不管它有什么性质。我想在线程之间共享此类的对象。在过去,我会认为 mutex - 虽然它可能不是最有效的方式 - 足以确保一切正常。

现在,我已经阅读了一些关于 std::atomic 的内容,即使对于简单的 bool 引用也是必要的:Do I have to use atomic<bool> for "exit" bool variable?

虽然我明白为什么 bool 应该是原子的,但我不明白一个简单的互斥体如何防止以下问题:

Second, when two threads run on different cores, they have separate caches; writing a value stores it in the cache, but doesn't update other caches, so a thread might not see a value written by another thread.

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

因此,目前对我来说,简单地在包含共享资源的所有区域周围放置一个基于互斥锁的锁似乎是不够的。难道这两个线程还没有这个资源的不同版本,因为线程缓存不会更新吗?

最佳答案

C++ 存储模型保证一个线程中对对象的更改对其他线程可见(如果它们受互斥量保护)。参见 http://en.cppreference.com/w/cpp/language/memory_model了解详情。

关于c++ - 两个线程的公共(public)资源 - 足够同步了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com