gpt4 book ai didi

c++ - 必须将互斥锁用于数组中的 "get"值吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:51 26 4
gpt4 key购买 nike

我知道,如果我要从多个线程分配值到数组中的相同位置(或递增该值等),我将需要使用互斥锁,以便该值阵列的那部分将保持连贯。

(示例):

for(ix = 0; ix < nx; ix++)
{
x = x_space[ix];
for(iy = 0; iy < ny; iy++)
{
y = y_space[iy];

mutex_lock[&mut];
sum = sum + f(x,y);
mutex_unlock[&mut];
}
}

但是否也有必要在线程可能同时从数组中获取值的代码部分周围使用互斥体?

(示例):

for(ix = 0; ix < nx; ix++)
{
mutex_lock[&xmut];
x = x_space[ix];
mutex_unlock[&xmut];

for(iy = 0; iy < ny; iy++)
{
mutex_lock[&ymut];
y = y_space[iy];
mutex_unlock[&ymut];

mutex_lock[&mut];
sum = sum + f(x,y);
mutex_unlock[&mut];
}
}

最佳答案

没有。你可以这样想:很多人可以同时看一杯水,但一次只有一个人可以喝。

只要您只是阅读(复印或其他),就可以了。但是,如果您正在处理没有原子操作的数据类型(或某些不执行原子操作的基本数据类型,出于内存对齐或其他原因)并且其他人 可能正在写入该内存,您可以查看处于“半更改”状态的数据,其他人正在更改它。因此,您可能需要一个互斥锁,具体取决于您的情况。

关于c++ - 必须将互斥锁用于数组中的 "get"值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967271/

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