gpt4 book ai didi

c - 互斥锁代码中发生死锁

转载 作者:行者123 更新时间:2023-11-30 20:28:23 26 4
gpt4 key购买 nike

我开发了一个用户级线程库。在代码中,有时会发生死锁,但我无法弄清楚为什么会发生。以下是互斥锁定和解锁功能的代码:

int gtthread_mutex_lock(gtthread_mutex_t *mutex)
{
if(!mutex) //checks if mutex is null
return -1;
while(mutex->available==1); //spin locks if mutex is already locked by someone else
__sync_val_compare_and_swap(&mutex->available,0,1); //atomic function to swap value 0 with 1
mutex->owner=node->th;
return 0;
}

int gtthread_mutex_unlock(gtthread_mutex_t *mutex)
{
if(!mutex) return -1;

if(mutex->available)
{
mutex->available=0;
mutex->owner=NULL;
}
return 0;
}

最佳答案

另一个线程可能会获取您的 while 测试和交换之间的锁。

您必须检查 __sync_val_compare_and_swap 的返回结果,如果未成功则重复。

此外,用于跟踪所有者的代码将不起作用,因为在解锁过程中,您可能会删除其他线程写入的信息。

最好只有一个字段(用原子操作处理)来保存所有者的信息,如果没有,则为 0。

关于c - 互斥锁代码中发生死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629432/

26 4 0