OpenMP为啥这段程序是死锁?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenMP为啥这段程序是死锁?相关的知识,希望对你有一定的参考价值。

在学OpenMP,书中举了一个死锁的例子,但是不明白为什么会死锁:
...
#pragma omp critical
y=f(x);
...
double f(double x)
#pragma omp critical
z=g(x);
...
这段代码中,不是其中一个线程顺序执行下来就可以吗?为什么还会死锁呢?

参考技术A 才发现你这源程序混合了C、F77、F95三种语法…… 而且没有恰当使用private保护变量或者reduction。 正确的写法(F95+OpenMP): program sct use omp_lib implicit none integer k,dct dct=0 !$OMP parallel do reduction(+:dct) do k=1,1000 dct=dct+1 enddo !$OMP end parallel do write(*,*)"dct=", dct pause end program sct

以上是关于OpenMP为啥这段程序是死锁?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个事务会产生死锁?

为啥相同事务的两个并行执行之间会出现死锁?

为啥从属性页调用afxmessagebox到扩展dll时mfc死锁

关于oracle数据库死锁,请大神进。为啥用java synchronized 关键字解决不了?怎么解决死锁问题?

为啥会出现死锁?

当 Hangfire 并行处理多个作业时,为啥 MySQL InnoDB 会产生如此多的死锁?