小编jri*_*jri的帖子

std::lock_guard 和 #pragma omp critical 之间的区别

让我们考虑一些代码,以便在具有多个线程的for循环中安全地递增变量。

为此,您必须在增加变量时使用某种锁定机制。当我在寻找解决方案时,我想出了以下解决方案。

我的问题是:

  1. 它们是否同样好,还是其中之一有一些后备?
  2. 何时使用 amutex而不是#pragma omp critical?
#include <iostream>
#include <mutex>

int main(int argc, char** argv)
{
    int someVar = 0;
    std::mutex someVar_mutex;

    #pragma omp parallel for
    for (int i = 0; i < 1000; i++)
    {
        std::lock_guard<std::mutex> lock(someVar_mutex);
        ++someVar;
    }

    std::cout << someVar << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>

int main(int argc, char** argv)
{
    int someVar = 0;

    #pragma omp parallel for
    for (int i = 0; i < 1000; …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading mutex openmp

6
推荐指数
2
解决办法
243
查看次数

标签 统计

c++ ×1

multithreading ×1

mutex ×1

openmp ×1

performance ×1