线程如何写入矩阵的不同单元格

时间:2011-06-13 19:35:55

标签: concurrency pthreads mutex race-condition

我有一个全局矩阵(类型向量< vector< char>>),我需要几个线程才能以我说的方式写入它。 起初,我想过只使用一个互斥锁,因为我害怕竞争条件(访问+写入可能不是原子的) 然后我使用了一个互斥体矩阵。我对此并不十分肯定。这似乎是同样的问题。

你能帮帮我吗?如果需要,我会添加更多细节。 感谢

1 个答案:

答案 0 :(得分:1)

您只需要一个互斥锁来保护多个线程访问的对象,其中至少有一个线程会修改该对象。

如果在任何线程访问它之前 调整矩阵的大小(例如在线程启动之前),那么如果多个线程访问同一个单元,则只需要一个互斥锁。如果您的线程正在访问不同的单元格,那么如果它们都没有调整矩阵的大小,那么一切都会正常。

如果一个线程写入一个单元格而另一个线程从同一个单元格读取,则两个线程必须在访问该单元格之前锁定相同的互斥锁。如果两个线程写入同一个单元格,则两个线程必须再次锁定相同的互斥锁。这可以是与其他单元格不同的互斥锁,也可以是相同的互斥锁。

如果一个线程修改了矩阵结构,而任何其他线程正在访问矩阵,那么所涉及的所有线程都必须锁定相同的互斥锁。这可以是用于单个单元格的任何互斥锁的不同互斥锁,也可以是相同的互斥锁。