日期:2014-05-16 浏览次数:20773 次
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #define MAX_COUNT 9 pthread_mutex_t mutex; //互斥变量 pthread_cond_t cond; //条件变量 int count = 0; void AddCount_Odd_Func(void); void AddCount_Even_Func(void); int main() { int ret; pthread_t odd_thread, even_thread; //两个线程 pthread_attr_t thread_attr; //线程的属性结构 count = 0; pthread_mutex_init(&mutex, NULL); //互斥变量的初始化 pthread_cond_init(&cond, NULL); //条件变量的初始化 ret = pthread_attr_init(&thread_attr); //属性结构体初始化 if (ret != 0) { perror("Attribute Creation Failed!"); exit(EXIT_FAILURE); } pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); //设置线程分离状态的函数,PTHREAD_CREATE_DETACHED(分离线程):不需要创建线程的线程等待 //函数运行结束线程便终止,同时释放占用的系统资源 ret = pthread_create(&odd_thread, &thread_attr, (void *)&AddCount_Odd_Func, NULL); if (ret != 0) { perror("Thread Creation Failed!"); exit(EXIT_FAILURE); } ret = pthread_create(&even_thread, &thread_attr, (void *)&AddCount_Even_Func, NULL); if (ret != 0) { perror("Thread Creation Failed!"); exit(EXIT_FAILURE); } while (count < MAX_COUNT); printf("Finished!\n"); pthread_cond_destroy(&cond); //销毁条件变量 pthread_mutex_destroy(&mutex); return 0; } void AddCount_Odd_Func(void) { pthread_mutex_lock(&mutex); while (count < MAX_COUNT) { if (count % 2 == 1) { count++; printf("AddCount_Odd_Func(): count = %d.\n", count); pthread_cond_signal(&cond); //用来释放被阻塞在条件变量cond上的线程 } else pthread_cond_wait(&cond, &mutex); //使线程阻塞在条件变量cond上 } pthread_mutex_unlock(&mutex); } void AddCount_Even_Func(void) { pthread_mutex_lock(&mutex); while (count < MAX_COUNT) { if (count % 2 == 0) { count++; printf("AddCount_Even_Func(): count = %d.\n", count); pthread_cond_signal(&cond); } else pthread_cond_wait(&cond, &mutex); } pthread_mutex_unlock(&mutex); }
gcc example.c -lpthread
运行结果如下: