#include <pthread.h>
#include <stdio.h>
#include <unistd.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("线程等待唤醒,锁定互斥量...\n");pthread_mutex_lock(&mutex);printf("线程等待在条件变量上...,这个时候会阻塞这里,且释放锁\n");pthread_cond_wait(&cond, &mutex); // 线程被唤醒后继续执行printf("线程被唤醒!\n");pthread_mutex_unlock(&mutex);return NULL;
}int main() {pthread_t thread_id;// 创建线程pthread_create(&thread_id, NULL, &thread_function, NULL);// 睡眠一段时间,以便让线程先运行并等待条件变量sleep(5);// 唤醒等待在条件变量上的线程printf("主线程发送唤醒信号...\n");pthread_mutex_lock(&mutex);printf("主线程发送唤醒信号2...\n");pthread_cond_signal(&cond);printf("主线程发送唤醒信号3...\n");pthread_mutex_unlock(&mutex); //上面加锁,这里就必须配套解锁,否则即便pthread_cond_wait取不到锁还是卡在那printf("主线程发送唤醒信号4...\n"); // 等待子线程结束printf("等待子线程结束 1...\n");pthread_join(thread_id, NULL);printf("等待子线程结束 2...\n");return 0;
}
makefile执行 :gcc optThread.c -lpthread -o opt
执行结果
fr:徐海涛(hunkxu)