相关疑难解决方法(0)

如何实现pthread_mutex_lock

我很想知道如何在Unix中实现与线程之间的同步相关的函数.例如,当我打电话时会发生什么pthread_mutex_lock?有没有使用指针?对源代码的引用确实会有所帮助.

unix linux synchronization mutex pthreads

40
推荐指数
2
解决办法
3万
查看次数

如何并行生成随机数?

我想使用openMP并行生成伪随机数,如下所示:

int i;
#pragma omp parallel for
for (i=0;i<100;i++)
{
    printf("%d %d %d\n",i,omp_get_thread_num(),rand());
} 
return 0; 
Run Code Online (Sandbox Code Playgroud)

我已经在Windows上测试了它,并且我获得了巨大的加速,但每个线程生成了完全相同的数字.我已经在Linux上测试了它并且我得到了巨大的减速,8核处理器上的并行版本比顺序慢了大约10倍,但是每个线程生成了不同的数字.

有没有办法同时加速和不同的数字?

编辑27.11.2010
我想我已经用乔纳森杜尔西的一个想法解决了这个问题.似乎下面的代码在linux和windows上运行得很快.数字也是伪随机的.你怎么看待这件事?

int seed[10];

int main(int argc, char **argv) 
{
int i,s;
for (i=0;i<10;i++)
    seed[i] = rand();

#pragma omp parallel private(s)
{
    s = seed[omp_get_thread_num()];
    #pragma omp for
    for (i=0;i<1000;i++)
    {
        printf("%d %d %d\n",i,omp_get_thread_num(),s);
        s=(s*17931+7391); // those numbers should be choosen more carefully
    }
    seed[omp_get_thread_num()] = s;
}
return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

PS.:我还没有接受任何答案,因为我需要确定这个想法是好的.

c random openmp

14
推荐指数
3
解决办法
2万
查看次数

标签 统计

c ×1

linux ×1

mutex ×1

openmp ×1

pthreads ×1

random ×1

synchronization ×1

unix ×1