相关疑难解决方法(0)

Cuda Mutex,为什么会死锁?

我正在尝试实现基于原子的互斥锁。

我成功了,但我有一个关于扭曲/死锁的问题。

这段代码运行良好。

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

2
推荐指数
1
解决办法
2111
查看次数

标签 统计

cuda ×1