0
共享内存在多线程中使用时是否需要同步?以下是该场景。跨线程共享内存访问
- 使用Int数组创建的共享内存(在进程Pa中)。
- Pa的每个线程都有该数组的索引,并且会根据某些条件更新数组[index] 。
- 我们是否需要Mutex来同步Int数组访问?
- 假设有一个进程(Pb)尝试访问此Int数组。我需要 互斥量(线程)和信号量进程同步。
让我知道同样的意见。
共享内存在多线程中使用时是否需要同步?以下是该场景。跨线程共享内存访问
让我知道同样的意见。
如果数组包含纯值类型和每个线程在阵列的一个不相交子集操作 - 这是说,每个线程有一个互斥组索引将被读/写或从的 - 然后不,你不需要任何形式的同步。
数组本身只是一块内存。重要的是,没有两个线程试图读取或写入到不受保护的相同内存位置 - 他们可以愉快地读取和写入交错或相邻或任何其他不相交的位置,因为它们不会踩到彼此的脚趾,所以说话。
但是,如果有多个线程需要读取或写入数组中的相同索引,那么您绝对需要通过某种类型的同步来保护这些读写操作。例如,假设您有:
int ia[10];
和两个线程。如果你可以保证(无论如何)线程#1将只访问ia[0..4]
和线程#2将只能访问ia[5..9]
那么你很好。不过,如果他们都想阅读或写作,则需要采取措施来保护这些访问权限。
取决于共享内存的OP含义。 True Posix共享内存的所有内容都是原子读写。 – SergeyA
@SergeyA当然这是一个实现细节 - 我不认为C通常会保证这一点,不是吗?或者我错过了什么? –