gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:49:54 26 4
gpt4 key购买 nike

所以,我有大量的 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/

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