【发布时间】:2015-05-23 02:12:50
【问题描述】:
因此,在我开始编写应该与属于集合的多个对象进行交互的多线程程序之前......我想清楚地了解所涉及的概念......
我主要担心死锁之类的事情。
假设我有一个这样定义的对象集合......
vector<MyObjects> m_objects;
想象一下它被填充了 100-500 个对象。 现在想象一下,这些对象中的每一个都需要在某个时候与所有其他对象进行通信。用英语来说,他们需要能够安全地读取和写入所有其他对象......
我知道为了写入一个对象,它需要被锁定......但是一个对象可以在没有额外功能的情况下安全地从另一个对象读取吗?如果是这样,对象可以从正在写入的锁定对象中读取吗? (我对最后一个问题的第一个猜测是否定的,因为这没有意义)
如果有人对此主题有一些易于理解的文章/读物,我很乐意深入研究一下...
【问题讨论】:
-
我不确定你想要什么。 “现在想象......在某个时候其他对象”......还有什么其他对象? Vector 中的其他对象?
-
是向量中的其他对象。
-
问题是 - 矢量是否会改变。如果vector没有变化,vector本身就不需要被保护。一般来说,多次读取是安全的,读/写和多次写入是不安全的。您还会遇到“错误共享”的问题,即对象可以在缓存中彼此靠近,从而导致不必要的缓存抖动。
-
OK,向量本身可以修改吗?它的大小是否可以增长,是否可以在运行时删除项目,等等。
-
向量的内容会不断变化,向量中对象的添加和删除也会发生。
标签: c++ multithreading