【发布时间】:2015-07-20 23:13:33
【问题描述】:
我有一个int array[100],我想要 5 个线程来计算所有数组元素的总和。
每个线程在其专用范围内迭代 20 个元素并将总和写入全局 sum 变量。
这里需要互斥体吗?不需要同步,因为所有线程都从独立的源读取。
for(i=offset; i<offset+range; i++){
// not used pthread_mutex_lock(&mutex);
sum += array[i];
// not used pthread_mutex_unlock(&mutex);
}
这会导致不可预知的行为,还是操作系统实际上会处理这个问题?
在这种情况下是否建议省略互斥锁?我注意到没有它,这些算法运行得更快。
【问题讨论】:
-
你所有的线程都在修改同一个变量,所以你当然需要一个互斥体......
标签: c multithreading pthreads mutex