我正在学习在 Linux 编程中使用互斥锁。我遇到了 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");
}
抱歉格式化少代码..
问候