当前位置: 首页 > news >正文

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

一、代码如下

#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、处在休眠的线程可以被其他线程获得排他锁后唤醒;

 

相关文章:

  • 代码随想录动态规划06
  • 【HTML 基础教程】HTML 表格
  • P1091 [NOIP 2004 提高组] 合唱队形
  • 码上爬-第78题
  • 音视频(一)ZLMediaKit搭建部署
  • 如何屏蔽mac电脑更新提醒,禁止系统更新
  • Gossip协议:分布式系统中的“八卦”传播艺术
  • 【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解
  • 超导量子计算机编程实战:IBM Qiskit 2025新API详解
  • 每日算法-250330
  • 两阶段提交2PC原理
  • HCIP--5实验:综合实验
  • Unity中给Animator扩展一个异步等待播放指定clip的方法
  • QFlightInstruments飞行仪表控件库
  • 快速幂算法
  • 【Qt】文件与音视频
  • 【C++】map
  • 华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现PWCNet光流估计
  • 梓航建站CMS独立版最新v1.9.4全插件PC+H5
  • 表格结构数据