我正在尝试实现基于原子的互斥锁。
我成功了,但我有一个关于扭曲/死锁的问题。
这段代码运行良好。
bool blocked = true;
while(blocked) {
if(0 == atomicCAS(&mLock, 0, 1)) {
index = mSize++;
doCriticJob();
atomicExch(&mLock, 0);
blocked = false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个不...
while(true) {
if(0 == atomicCAS(&mLock, 0, 1)) {
index = mSize++;
doCriticJob();
atomicExch(&mLock, 0);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是退出循环的位置。在第一个中,退出发生在条件所在的位置,在第二个中它发生在 if 的末尾,所以线程等待其他经纱完成循环,但其他线程也等待第一个线程......但我想我错了,所以如果你能解释我:)。
谢谢 !
cuda ×1