首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果同一个锁用于输入不同的关键部分,会发生什么?

如果同一个锁用于输入不同的关键部分,会发生什么?
EN

Stack Overflow用户
提问于 2021-08-24 19:41:15
回答 1查看 254关注 0票数 1

我的代码中有两个关键部分。我可以使用相同的锁进入不同的关键部分吗?我不明白这段代码会出什么问题。

代码语言:javascript
复制
void func1(int y, int z)
{
   writeLock.lock()
     x = y; // critical section 1
   writeLock.unlock()
   ...
   while(1)
   {
      writeLock.lock()
        myVar = z; // critical section 2

      writeLock.unlock()
      if (z == 100)
        break;
   }
}

我不想在循环中对x = y进行分配,所以我在两处都使用了相同的锁。这样做可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 19:46:49

如果xmyvar完全不相交,那么您不应该对这两个关键部分使用相同的互斥,而是对每个关键部分使用一个互斥。

这样做,如果一个线程位于x关键部分,那么其他线程都不能进入相同的关键部分,但是另一个线程可以进入myvar关键部分(反之亦然)。

在您的解决方案中,触摸x可以防止任何其他线程同时接触myvar,这似乎是没有道理的。

“可以吗?”是的,它本身并没有错,但是它不是最优的,因为它人为地序列化了可以同时执行的不同部分的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68913251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档