如何使用OpenMP在C ++中实现监视器?

时间:2017-10-20 13:20:06

标签: c++ multithreading openmp producer-consumer

我正在使用C ++中的Producer-consumer problem,在使用OpenMP时实现监视器的方法是什么?

我在OpenMP中找不到类似conditional_variable的内容,我无法在维基百科示例中的某些条件下实现等待/通知。

1 个答案:

答案 0 :(得分:-1)

我不认为OpenMP提供任何使用条件变量的方法,因此并不真正适合您的特定目的。

OpenMP不为条件变量提供任何构造。它的目的更适用于多线程科学应用程序,在这些应用程序中,您只是将问题分成小块,而您并不完全考虑线程,因为OpenMP的运行时库会同步这一点。

某些实现使用pthread作为后端,因此可以解决并使用pthread_cond族函数。但是,这很容易出现死锁(因为你无法控制线程的创建和连接方式),即使使用相同工具的不同版本,也可能无法移植。

在您的情况下,我会直接使用C ++标准线程库,该库已包含实现生产者使用者队列所需的全部内容。如果您仍想坚持并行编程框架,请查看英特尔线程构建模块,因为它已经实现了这种Concurrent Queues