-2
사용자 수준의 스레드 라이브러리를 개발했습니다. 코드에서 때때로 교착 상태가 발생하지만 그 이유를 파악할 수 없습니다. 또 다른 스레드가 당신의 while
테스트 및 스왑 사이에 잠금을 얻을 수뮤텍스 코드에서 교착 상태가 발생했습니다.
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