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