OpenMP - 同步机制“锁”

OpenMP 中的锁(lock)是一种同步机制,用于保护共享资源,以防止多个线程同时访问或修改它,从而避免竞态条件。锁允许线程在访问临界区之前获取锁,并在退出临界区时释放锁。这样可以确保在任何给定时间只有一个线程能够访问临界区,从而保证了数据的一致性。

简单锁

最基本的锁,只能被一个线程锁定。当一个线程锁定了简单锁时,其他线程必须等待锁的释放才能继续执行。

#include <iostream>
#include <omp.h>
using namespace std;

int main(int argc, char* argv[]){
    omp_lock_t lock;
    omp_init_lock(&lock);
    int s = 0;
    #pragma omp parallel num_threads(800)
    {
        omp_set_lock(&lock);
        s++;
        omp_unset_lock(&lock);
    }
    omp_destroy_lock(&lock);
    cout << "s = " << s << endl;
    return 0;
}
lock
 s = 800  // 加锁
s = 763  // 不加锁

嵌套锁

嵌套锁允许同一个线程多次获取同一个锁,而不会发生死锁。

omp_nest_lock_t nestLock;
omp_init_nest_lock(&nestLock);
omp_set_nest_lock(&nestLock);
// ...
omp_unset_nest_lock(&nestLock);
omp_destroy_nest_lock(&nestLock);

。。。

posted @ 2024-03-15 13:35  酥炸小黄瓜  阅读(130)  评论(0编辑  收藏  举报