【发布时间】:2021-10-25 00:33:08
【问题描述】:
我的代码中有 2 个关键部分。我可以使用同一个锁进入不同的临界区吗?我不明白这段代码会出现什么问题。
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,所以我在两个地方都使用了相同的锁。这样做可以吗?
【问题讨论】:
-
这似乎不是立即不合理的。虽然我建议用
lock_guard替换裸露的lock/unlock调用。让编译器找出可以退出临界区的所有方法,而不是自己盯着它。 -
是的,你可以,但这是你想做的吗?如果两个临界区都操作相同的资源,则使用相同的锁是有意义的。如果他们操纵不同的资源,它仍然可能有意义,但我们需要更多信息来进行调用。
标签: c++ multithreading operating-system locking