c++ - 多线程:何时调用 mutex.lock?

标签 c++ multithreading mutex

所以,我有大量的 ob 对象,每个对象都有几个字段,包括一个 c 数组,这些字段在它们的“Update()”方法中被修改。现在我创建了几个线程,每个线程更新这些对象的一部分。据我所知,在调用更新函数之前调用 lock() 是没有用的,因为这实际上会导致更新按顺序调用,就像它们没有多线程一样。现在,对象有指针,相互交叉引用。我是否需要在每次修改任何字段时或在特定操作(如删除、重新初始化数组等)之前调用锁定?

最佳答案

Do I need to call lock every time ANY field is modified, or just before specific operations (like delete, re-initializing arrays, etc?)

都没有。你甚至需要有一个锁来读取,以确保另一个线程不会通过修改你正在读取的数据来完成。您可能想使用多读/一写锁。我建议您从拥有一个锁开始(无论是简单的互斥锁还是更复杂的多读取器/写入器锁)并让代码正常工作,这样您就可以剖析它并查看您是否真的需要更细粒度的锁定,那么您将有更多的经验和对选项的理解以及有关如何管理它的建议。

如果您确实需要细粒度锁定,那么技巧就是考虑锁在逻辑上属于何处 - 例如 - 每个对象可能有一个。然后,您需要了解避免死锁的技术。您也应该阅读一些背景资料。

关于c++ - 多线程:何时调用 mutex.lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869658/

相关文章:

c# - 为什么此代码不产生撕裂读取?

c++ - 在 C++ 中接受基于线程表现不同的套接字包括

.net - .NET Mutex.ReleaseMutex和Mutex.Close

C++:类如何将自身加载到内存中以增加全局变量?

c++ - 如何在 Eigen 中获取系数矩阵?

c++ - 如何打印 Qt :HANDLE on linux? (Qt5)

java - 即使只有一个编写器线程, volatile 也会出现问题

无法同步我的 C 线程

c++ - Qt 文档和可重入性

C++,从函数调用分配给类实例?