我的代码中有两个关键部分。我可以使用相同的锁进入不同的关键部分吗?我不明白这段代码会出什么问题。
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进行分配,所以我在两处都使用了相同的锁。这样做可以吗?
发布于 2021-08-24 19:46:49
如果x和myvar完全不相交,那么您不应该对这两个关键部分使用相同的互斥,而是对每个关键部分使用一个互斥。
这样做,如果一个线程位于x关键部分,那么其他线程都不能进入相同的关键部分,但是另一个线程可以进入myvar关键部分(反之亦然)。
在您的解决方案中,触摸x可以防止任何其他线程同时接触myvar,这似乎是没有道理的。
“可以吗?”是的,它本身并没有错,但是它不是最优的,因为它人为地序列化了可以同时执行的不同部分的代码。
https://stackoverflow.com/questions/68913251
复制相似问题