共享内存访问跨线程

时间:2016-03-15 20:30:37

标签: c multithreading shared-memory

在多个线程中使用时,共享内存是否需要同步。以下是该方案。

  1. 使用类型Int数组创建的共享内存(在进程Pa中)。
  2. Pa的每个线程都有一个这个数组的索引,并将更新数组[index] 基于某些条件。
  3. 我们是否需要Mutex来同步Int Array Access?
  4. 假设再有一个进程(Pb)尝试访问此Int数组。我需要 mutex(用于线程)和信号量用于进程同步。
  5. 让我知道相同的评论。

1 个答案:

答案 0 :(得分:1)

如果数组包含纯值类型,并且每个线程都在数组的不相交子集上运行 - 这就是说 每个线程都有一组互斥的索引,它将读/写或者从 - 然后不,您不需要任何类型的同步。

数组本身只是一块内存。重要的是没有两个线程试图读取或写入不受保护的相同存储器位置 - 他们可以愉快地读取和写入交错或相邻或任何其他不相交的位置,因为他们不会踩到彼此的脚趾可以这么说。

但是,如果几个线程需要读取或写入数组中的相同索引,那么您绝对需要使用某种类型的同步来保护这些读取和写入。例如,假设你有:

int ia[10];

和两个主题。如果你能保证(通过任何方式)线程#1只能访问ia[0..4]而线程#2只能访问ia[5..9]那么你就是好的。但是,如果他们都想在任何地方读或写,那么你需要一些东西来保护这些访问。