gpt4 book ai didi

c - 跨线程共享内存访问

转载 作者:行者123 更新时间:2023-11-30 15:10:43 29 4
gpt4 key购买 nike

共享内存在多​​线程中使用时是否需要同步。以下是场景。

  1. 使用 Int Array 类型创建的共享内存(在进程 Pa 中)。
  2. Pa 的每个线程都有这个数组的索引,并且会更新 array[index]基于某些条件。
  3. 我们需要互斥体来同步 Int 数组访问吗?
  4. 假设还有一个进程 (Pb) 尝试访问此 Int 数组。我需要互斥锁(用于线程)和信号量用于进程同步。

让我知道对此的评论。

最佳答案

如果数组包含纯值类型,并且每个线程都在数组的不相交子集上进行操作 - 这就是说每个线程都有一组互斥的索引,它将读取/写入或来自 - 那么不,您不需要任何类型的同步。

数组本身只是一 block 内存。重要的是,没有两个线程尝试在不 protected 情况下读取或写入同一内​​存位置 - 它们可以愉快地读取和写入交错或相邻或任何其他不相交的位置,因为它们不会踩到彼此的脚趾,所以说话。

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

int ia[10];

和两个线程。如果您可以保证(通过任何方式)线程#1将仅访问ia[0..4]并且线程#2将仅访问ia[5..9] > 那你就很好了。但是,如果他们都想在任何地方读取或写入,则您需要一些东西来保护这些访问。

关于c - 跨线程共享内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021508/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com