C++ pragma omp critical(名称)

标签 c++ openmp critical-section

假设我有一个包含临界区的类方法:

class A{
    public:
        A(){};

        method(){
            #pragma omp critical(name)
                { //do something }
        }
}

现在我有两个 A 实例,即。 A a1A a2。什么行为 a1.method()a2.method() 的? {//do something} 可以在 同一时间?

最后,我想禁止同时调用 {//do something} 相同的实例,但允许同时调用 {//do something} 不同的实例。

最佳答案

临界区对于对象的所有实例都是相同的——一次只有一个线程能够进入。

要允许不同的实例分别管理访问,请使用实例拥有的互斥量。您可以使用 omp_init_lock() 和其他 omp_xxx_lock() 函数、std::mutex 或其他互斥实现。

关于C++ pragma omp critical(名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716014/

相关文章:

c++ - 获取矮人错误版本 '4'

c++ - 如何解析 KLV 数据?

c++ - 通过 FS 寄存器访问衍生进程的 TIB?

Windows 内核级全局临界区

c++ - 为什么 std::mutex 比 CRITICAL_SECTION 慢两倍

c++ - 在 C 中使用移位运算符进行乘法和除法实际上更快吗?

c++ - openMP 关键部分

c++ - 在 omp parallel for 循环中使用 unique_ptr<CCfits::FITS> 导致 SEG.FAULT

c - 在运行计算密集型任务时将数据保存到磁盘的有效方法

c++ - 使用简单的 CRITICAL_SECTION,似乎陷入僵局