天津储鑫盛钢材现货供应商 发表于 2025-3-31 12:33:39

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C语言pthread库的线程休眠和唤醒的案例