当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
linux条件锁和互斥锁
发布时间:2010/12/12 20:14:19 来源:城市学习网 编辑:ziteng
  等待线程
  1。使用pthread_cond_wait前要先加锁
  2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活
  3。pthread_cond_wait被激活后会再自动加锁
  激活线程:
  1。加锁(和等待线程用同一个锁)
  2。pthread_cond_signal发送信号
  3。解锁
  激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。
  程序示例:
  #include <stdio.h>
  #include <pthread.h>
  #include <unistd.h>
  pthread_mutex_t count_lock;
  pthread_cond_t count_nonzero;
  unsigned count = 0;
  void * decrement_count(void *arg) {
  pthread_mutex_lock (&count_lock);
  printf("decrement_count get count_lock\n");
  while(count==0) {
  printf("decrement_count count == 0 \n");
  printf("decrement_count before cond_wait \n");
  pthread_cond_wait( &count_nonzero, &count_lock);
  printf("decrement_count after cond_wait \n");
  }
  count = count -1;
  pthread_mutex_unlock (&count_lock);
  }
  void * increment_count(void *arg){
  pthread_mutex_lock(&count_lock);
  printf("increment_count get count_lock\n");
  if(count==0) {
  printf("increment_count before cond_signal\n");
  pthread_cond_signal(&count_nonzero);
  printf("increment_count after cond_signal\n");
  }
  count=count+1;
  pthread_mutex_unlock(&count_lock);
  }
  int main(void)
  {
  pthread_t tid1,tid2;
  pthread_mutex_init(&count_lock,NULL);
  pthread_cond_init(&count_nonzero,NULL);
  pthread_create(&tid1,NULL,decrement_count,NULL);
  sleep(2);
  pthread_create(&tid2,NULL,increment_count,NULL);
  sleep(10);
  pthread_exit(0);
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved