std::mutex 阻止线程修改什么?

Bac*_*777 2 c++ multithreading mutex thread-safety

mutex.lock()或 时,内存的哪一部分被锁定.try_lock(),是只是函数还是整个程序被锁定?

Omn*_*ity 5

除了互斥锁之外,没有任何东西被锁定。其他一切都继续运行(直到它尝试锁定已经锁定的互斥锁)。互斥锁的存在只是为了让两个线程不能同时在互斥锁锁定和互斥解锁之间运行代码。

  • 我们使用互斥体来保护代码块的想法有点不对劲。代码不需要保护。我们使用互斥体来保护代码块所操作的_共享数据_。当系统中有多个代码块对相同的共享数据进行操作时,这一区别就变得很重要。仅当访问相同数据的每个代码块首先锁定相同的互斥体时,互斥体才提供保护。 (2认同)