我正在學習在Linux編程中使用互斥鎖。我遇到了trylock函數,它首先檢查互斥鎖是否可用,否則鎖定,它會返回。Linux中的pthread_mutex_trylock()
現在我的問題是:
- 是否達到函數結束而不執行關鍵部分,當的tryLock被調用後返回?
- 爲什麼不在我的代碼中打印
errno
?
下面是代碼:
int main()
{
pthread_t tid[5];
int i;
if(pthread_mutex_init(&mutex,NULL))
printf("Failed to lock the mutex\n");
for(i=0;i<5;i++)
{
if(pthread_create(&tid[i],NULL,func,&i))
printf("Failed to create a thread\n");
if(errno==EBUSY)
printf("thread busy\n");
}
for(i=0;i<5;i++)
{
if(pthread_join(tid[i],NULL))
printf("Failed to wait for thread %d\n",i);
}
printf("All threads terminated\n");
return 0;
}
void *func(void * arg)
{
int i=*(int *)arg;
if(pthread_mutex_trylock(&mutex)==0)
{
sleep(5);
printf(" i is %d\n",i);
pthread_mutex_unlock(&mutex);
}
else
if(errno== EBUSY)
printf("thread busy\n");
}
對不起格式更少的代碼..
問候
如果我想讓每個線程都應該執行關鍵部分,我可以將trylock函數放在一個循環中直到結果!= EBUSY ..這是否有效? – Alfred
它確實設置errno其實http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.bpxbd00%2Fptmtylk.htm –
@Uzair:請參閱http ://pubs.opengroup.org/onlinepubs/007904875/functions/pthread_mutex_lock.html'pthread_mutex_trylock()'的行爲與Linux上POSIX規範(和我的答案)所描述的一樣; IBM文檔顯然是專門針對zOS的。 –