gpt4 book ai didi

c++ - 我可以在 OpenMP 中使用多个 omp_lock_t 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:33 25 4
gpt4 key购买 nike

我假设我能够创建 2 个不同的 omp_lock_t,并彼此独立地锁定它们。我用 gcc 4.4 和 gcc 4.6.1 测试了以下代码部分并得到了相同的输出:

omp_lock_t lockA;
omp_lock_t lockB;
omp_init_lock(&lockA);
omp_init_lock(&lockB);

std::cout << "Lock B is: " omp_test_lock(&lockB) << "\n";
omp_set_lock(&lockA);
std::cout << "Lock A set\n";
std::cout << "Lock B is: " omp_test_lock(&lockB) << "\n";

omp_set_lock(&lockB);
...

此代码产生以下输出:

Lock B is: 1
Lock A set
Lock B is: 0

然后它在 omp_set_lock(&lockB) 尝试中死锁。

难道不能创建两把不同的锁,独立使用吗?如果可能,设置这些锁的正确方法是什么?

谢谢

最佳答案

代码按预期工作。我假设您对 omp_test_lock 的作用有误解(尤其是因为这个名字确实非常具有误导性)。

omp_test_lock 尝试获取一个锁。但是除非 omp_set_lock,否则它不会阻塞,直到成功获取锁。但这是唯一的区别。值得注意的是,在第一次“测试”(不仅仅是测试)之后,获取了 lockB,这就是为什么第二次“测试”失败,以及为什么随后的 omp_set_lock(&lockB) 死锁。

只是为了说明这一点:是的,您可以使用多个锁。

omp_lock_t lockA;
omp_lock_t lockB;
omp_init_lock(&lockA);
omp_init_lock(&lockB);

omp_set_lock(&lockA);
std::cout << "Lock A set\n";
omp_set_lock(&lockB);
std::cout << "Lock B set\n";

这段代码不会死锁。

关于c++ - 我可以在 OpenMP 中使用多个 omp_lock_t 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com