gpt4 book ai didi

c - Linux 中的 pthread_mutex_trylock()

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:31 25 4
gpt4 key购买 nike

我正在学习在 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");
}

抱歉格式化更少的代码..

问候

最佳答案

pthread_mutex_trylock() 不设置 errno - 您只需使用返回值:

int result = pthread_mutex_trylock(&mutex);

if(result==0)
{
sleep(5);
printf(" i is %d\n",i);

pthread_mutex_unlock(&mutex);
}
else
if (result == EBUSY)
printf("thread busy\n");
}

关于c - Linux 中的 pthread_mutex_trylock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com