跨线程共享内存访问
Shared Memory Access Across threads
共享内存在多线程中使用时是否需要同步。以下是场景。
- 使用 Int 数组类型创建的共享内存(在进程 Pa 中)。
- Pa的每个线程都有一个指向这个数组的索引,并且会更新数组[index]
基于某些条件。
- 我们是否需要 Mutex 来同步 Int 数组访问?
- 假设另一个进程 (Pb) 尝试访问此 Int 数组。我需要
互斥量(用于线程)和信号量用于进程同步。
让我知道相同的评论。
如果数组包含纯值类型并且每个线程都在数组的一个不相交子集上操作 - 这就是说 每个线程都有一组互斥的索引它将 reading/writing 往返于 - 那么不,您不需要任何类型的同步。
数组本身只是一块内存。重要的是,没有两个线程试图在不受保护的情况下读取或写入同一内存位置——它们可以愉快地读取和写入交错或相邻或任何其他不相交的位置,因为它们不会踩到彼此的脚趾,所以说话。
但是,如果多个线程需要读取或写入数组中的相同索引,那么您绝对需要使用某种类型的同步来保护这些读取和写入。例如,假设您有 :
int ia[10];
和两个线程。如果您可以(通过任何方式)保证线程#1 将仅访问 ia[0..4]
并且线程#2 将仅访问 ia[5..9]
那么您就很好了。但是,如果他们都想在任何地方读取或写入,则需要一些东西来保护这些访问。
共享内存在多线程中使用时是否需要同步。以下是场景。
- 使用 Int 数组类型创建的共享内存(在进程 Pa 中)。
- Pa的每个线程都有一个指向这个数组的索引,并且会更新数组[index] 基于某些条件。
- 我们是否需要 Mutex 来同步 Int 数组访问?
- 假设另一个进程 (Pb) 尝试访问此 Int 数组。我需要 互斥量(用于线程)和信号量用于进程同步。
让我知道相同的评论。
如果数组包含纯值类型并且每个线程都在数组的一个不相交子集上操作 - 这就是说 每个线程都有一组互斥的索引它将 reading/writing 往返于 - 那么不,您不需要任何类型的同步。
数组本身只是一块内存。重要的是,没有两个线程试图在不受保护的情况下读取或写入同一内存位置——它们可以愉快地读取和写入交错或相邻或任何其他不相交的位置,因为它们不会踩到彼此的脚趾,所以说话。
但是,如果多个线程需要读取或写入数组中的相同索引,那么您绝对需要使用某种类型的同步来保护这些读取和写入。例如,假设您有 :
int ia[10];
和两个线程。如果您可以(通过任何方式)保证线程#1 将仅访问 ia[0..4]
并且线程#2 将仅访问 ia[5..9]
那么您就很好了。但是,如果他们都想在任何地方读取或写入,则需要一些东西来保护这些访问。