-2
我開發了一個用戶級線程庫。在代碼中,有時會發生死鎖,但我無法弄清楚它爲什麼會發生。這裏是互斥鎖和開鎖功能的代碼:在互斥代碼中發生死鎖
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;
}
這是作業:http://www.cc.gatech.edu/classes/AY2005/cs6210_fall/Project1writeup.html – jman
是的,這是一個項目。我不是要求代碼。我只是要求一個互斥體不會工作的情況。 :) – CuriousCoder