码迷,mamicode.com
首页 > 其他好文 > 详细

thread_18

时间:2014-09-27 00:39:59      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   sp   div   on   c   

/*例子:下面第二次加锁时将出现死锁,如果改为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

标签:style   blog   color   io   ar   sp   div   on   c   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!