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]