如何将IO与OpenMP部分同步

时间:2012-09-06 06:35:07

标签: io synchronization openmp

当我执行下面的代码时,shell输出可能在线程0和线程1之间重叠。 所以我想问一下,在另一个线程开始输出之前,确保每个线程完成输出写入的最佳方法是什么?

这样可以确保输出干净。

非常感谢提前!

    #pragma omp parallel num_threads(2) shared(emperor)
    {
#pragma omp sections
        {
#pragma omp section
            {
                cout << "Open the listening thread by using openmp!"  << endl;
                emperor->startServerListening(); /// does some work
            }
#pragma omp section
            {
                cout << "Open the master thread by using openmp!" << endl;
                emperor->startServerCoupling(); /// does some other work
            }
        } /// End of sections
    } /// End of parallel section

1 个答案:

答案 0 :(得分:0)

最直接的方法是使用临界区,以便一次只有一个线程写入输出:

#pragma omp parallel num_threads(2) shared(emperor)
{
    #pragma omp sections
    {
        #pragma omp section
        {
            #pragma omp critical (cout)
                cout << "Open the listening thread by using openmp!"  << endl;
            emperor->startServerListening(); /// does some work
        }
        #pragma omp section
        {
            #pragma omp critical (cout)
                cout << "Open the master thread by using openmp!" << endl;
            emperor->startServerCoupling(); /// does some other work
        }
    } /// End of sections
} /// End of parallel section

您可以使用命名的关键部分来标识独占部分,即命名部分对于具有相同名称的所有部分(一次一个部分中的一个线程)是独占的。未命名的部分是所有其他未命名部分所独有的。