首页 > 代码库 > thread_18
thread_18
/*例子:下面第二次加锁时将出现死锁,如果改为PTHREAD_MUTEX_ERRORCHECK_NP类型,第二次加锁将会返回非零值,不会出现死锁。*/#include <stdlib.h>#include <pthread.h>#include <stdio.h>#include <sched.h>#include <sched.h>void *consumer1(void *p){ printf("<<<(%u),%d\n", (unsigned)pthread_self(),1); } void *consumer2(void *p) { printf("<<<(%u),%d\n", (unsigned)pthread_self(), 2); }int main(int argc, char *argv[]) {pthread_mutex_t mu ; pthread_t t1, t2, t3; int ret; pthread_mutexattr_t mutexattr; pthread_mutexattr_init(&mutexattr); pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK_NP); pthread_mutex_init(&mu, &mutexattr); if(!pthread_mutex_lock(&mu)) printf("get mutex (mian)\n"); if(!pthread_mutex_lock(&mu)) printf("get mutex (main)\n"); ret = pthread_create(&t1, NULL, consumer1, NULL); ret = pthread_create(&t2, NULL, consumer2,NULL); if(ret != 0) { printf("create failed,%d\n", ret); exit(1); } sleep(2); printf("main returned\n"); return 0; } /*注意:PTHREAD_MUTEX_TIMED_NP类型的锁,一个线程加的锁可以被另一个线程解锁,也可以解除未被锁定的锁,不会返回错误。PTHREAD_MUTEX_ERRORCHECK_NP类型的,加锁和解锁要同一个线程,如果某个线程尝试解除锁定的互斥锁不是由该线程锁定或者未锁定,则将返回错误。*/
thread_18
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。