数据在多线程环境中写入数组

时间:2013-09-24 17:21:01

标签: c++ arrays multithreading

我的多线程程序中有一个块,它执行以下操作:

void func(args){
    do computation;
    for(i = 0; i < n ; i++)
        value[i] += computed_value;
 }

多线程将执行此功能。所以我需要使用锁使程序线程安全。锁定使程序比单线程程序慢。我试过使用锁,但它使程序非常慢。还请提出一些替代方法。

2 个答案:

答案 0 :(得分:1)

根据您的代码,您没有任何锁定。我使用锁而不是锁作为我开始的方法。 (没有更多的澄清,我真的无法帮助那么多)。如果可以的话,只需锁定计算中的操作即可。

Psuedo示例

int computation(int i)
    lock();
    i = i + 1;
    unlock();
    return i;

答案 1 :(得分:0)

这个问题很普遍,所以这里有一些一般性的回答:

底线是你不能让多个线程同时读/写同一块内存。锁定阅读和写入有问题的内存是一种方法。那可以是你自己的锁,也可以使用原子+ =函数(如果有的话)。

我可以想到另外两种常用的替代方案:

1)让每个线程负责阵列的一个单独部分。因此,例如,如果您的数组中有4个线程和20个元素,则线程1可以在元素0-4上操作,线程2可以在元素5-9上操作,依此类推。

2)为每个线程分别创建一个数组副本,然后将数组的副本组合成一个最终数组。因此,例如,如果您的数组中有4个线程和20个元素,则线程1将在副本1上运行,第2个线程在副本2上运行,依此类推。完成后,您必须将4个阵列合并为1个。

显然第二个想法需要更多的内存,但我们对你的问题的参数知之甚少,所以这些只是一些一般的想法。