- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习在 Linux 编程中使用互斥量。我遇到了 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/
我花了一周的时间来修复一个程序,一开始我得到了SIGBUS,但经过多次尝试后程序仍然得到了SIGSEGV段错误,在下面我发布了段错误日志+源代码。如果专家帮助我修复此段错误错误,我将非常感激。任何建议
我正在使用 pthread_mutex_trylock 将互斥锁锁定在一个结构上,以便它只能在给定时间由单个线程访问/修改。如果互斥体已经被锁定,我只是从例程返回而不是排队/阻塞。 这是我的代码的基本
在我的代码中,我使用 pthread_mutx_trylock() 来检查线程 1 是否已完成他的任务工作并释放互斥锁吗?请让我知道它是否有效? 在线程 1 中: pthread_mutex
/////////////////////////////////* pthread_mutex_t stop = PTHREAD_MUTEX_INITIALIZER; int a = 1; void
我正在学习在 Linux 编程中使用互斥量。我遇到了 trylock 函数,它首先检查互斥量是否可用,否则将其锁定,然后返回。 现在我的问题是: 调用trylock时,是否在未执行临界区的情况下到达函
最近看了memcached的源码,在文件 memcached.h 中。我找到了这段代码: static inline int mutex_lock(pthread_mutex_t *mutex) {
我有以下测试程序。 #include #include using namespace std; pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIA
pthread_mutex_trylock 检测死锁,不阻塞,那你为什么“需要” pthread_mutex_lock? 也许当你故意想让线程阻塞?但那样的话可能会导致死锁? 最佳答案 pthread
一旦线程被取消,就需要解锁互斥体,以避免死锁。所以我设计了以下方法: // file_a.c pthread_attr_t attr; ... rc2 = pthread_attr_init(&att
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
这是对 this 的跟进问题。 在该代码中,当我不使用 fflush(stdout) 时,当我保持 sleep(1) 时,输出不会刷新到屏幕上。 #define S sleep(0) void* xT
我是一名优秀的程序员,十分优秀!