C语言pthread库的线程休眠和唤醒的案例

打印 上一主题 下一主题

主题 1840|帖子 1840|积分 5520

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、代码如下
   #include<stdio.h>
  #include<pthread.h>
   
  // 定义独占锁 
pthread_mutex_t mutex;
   
  // 定义条件信号对象
pthread_cond_t condition;
  
 // 初始化函数
void init(){
    
    int code = pthread_mutex_init(&mutex, NULL);
    printf("共享锁初始化状态:%d \n", code);
    
    
    code = pthread_cond_init(&condition, NULL); 
    printf("共享条件变量初始化状态:%d \n", code);
}
   
  // 线程的逻辑
  void* run(void* arg){
    printf("进入休眠状态.\n");
   
      // 加锁
    pthread_mutex_lock(&mutex);
    
    // 休眠
    pthread_cond_wait(&condition, &mutex);
    
    printf("被唤醒,退出。\n"); 
   
      // 开释锁
    pthread_mutex_unlock(&mutex);
}
  
// 测试线程休眠和唤醒 
int main(){
    init();
    
    pthread_t pid;
  
      // 创建一个线程运行 
    pthread_create(&pid, NULL, run, NULL); 
    
      // 获得排他锁
    pthread_mutex_lock(&mutex);
    
    printf("请输入一个字母,唤醒线程:\n");
    getchar();
    
    // 唤醒那些处在休眠的线程
    pthread_cond_signal(&condition);
 
      // 开释排他锁
    pthread_mutex_unlock(&mutex);
    
    getchar();
    // pthread_join(pid, NULL);
    
    return 0;
}
   
阐明:
   1、线程只有获得锁才能休眠;
   2、线程休眠后排他锁就开释了;
   3、处在休眠的线程可以被其他线程获得排他锁后唤醒;
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表