std :: lock_guard в openmp параллель - PullRequest
       12

std :: lock_guard в openmp параллель

1 голос
/ 23 октября 2019
#include <iostream>
#include <omp.h>
#include <mutex>
using namespace std;

int main()
{
    mutex l;

#pragma omp parallel for
    for(int i=0;i<24;i++){
        int thread_num = omp_get_thread_num();
        std::lock_guard<std::mutex> lg(l);
        cout<<"i: "<<i<<" thread_num:"<<thread_num<<endl;
    }

    return 0;
}

Привет, я не могу понять вывод такого кода. Похоже, что мьютекс не разблокируется после каждого цикла. Но lock_guard определяется внутри цикла, не так ли?

i: 0 thread_num:0
i: 1 thread_num:0
i: 2 thread_num:0
i: 3 thread_num:0
i: 4 thread_num:0
i: 5 thread_num:0
i: 12 thread_num:2
i: 13 thread_num:2
i: 14 thread_num:2
i: 15 thread_num:2
i: 16 thread_num:2
i: 17 thread_num:2
i: 6 thread_num:1
i: 7 thread_num:1
i: 8 thread_num:1
i: 9 thread_num:1
i: 10 thread_num:1
i: 11 thread_num:1
i: 18 thread_num:3
i: 19 thread_num:3
i: 20 thread_num:3
i: 21 thread_num:3
i: 22 thread_num:3
i: 23 thread_num:3

Моя система Linux с g ++ 9.1.0

1 Ответ

0 голосов
/ 24 октября 2019

Google твой друг. Вы можете найти документацию std::lock_guard на https://en.cppreference.com/w/cpp/thread/lock_guard

Если вы прочитаете ее, это объясняет, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...