创建条件: int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr); 返回值:函数成功返回0;任何其他返回值都表示错误 等待条件: int pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex); 返回值:函数成功返回0;任何其他返回值都表示错误 触发条件: int pthread_cond_signal(pthread_cond_t *cv); 返回值:函数成功返回0;任何其他返回值都表示错误 销毁条件: int pthread_cond_destroy(pthread_cond_t *cv); 返回值:函数成功返回0;任何其他返回值都表示错误
程序如下:
#include <stdio.h>
#include <pthread.h>pthread_mutex_t mutex;
int g_data = 0;
pthread_cond_t cond;
void *func1(void *arm)
{
printf("t1:%ld this is creat\n",(unsigned long)pthread_self());
printf("t1:pram is %d\n",*((int *)arm));while(1){
pthread_cond_wait(&cond,&mutex); //条件等待等待条件触发,并且此锁被解锁才可执行,否则一直阻塞。
printf("ti run================\n");
printf("t1 :%d\n",g_data);g_data = 0;
sleep(1);
}
}void *func2(void *arm)
{
printf("t2:%ld this is creat\n",(unsigned long)pthread_self());
printf("t2:pram is %d\n",*((int *)arm));pthread_mutex_lock(&mutex);
while(1){
// pthread_mutex_lock(&mutex);printf("t2 :%d\n",g_data++);
if(g_data == 3){
pthread_cond_signal(&cond); //条件触发
}pthread_mutex_unlock(&mutex);
sleep(1);
}
}int main()
{int ret;
pthread_t t1;
pthread_t t2;
int pram = 100;pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL); //条件创建ret = pthread_create(&t1,NULL,func1,(void *)&pram);
if(ret == 0){
// printf("main:creat t1 success\n");
}ret = pthread_create(&t2,NULL,func2,(void *)&pram);
if(ret == 0){
// printf("main:creat t2 success\n");
}printf("main:%ld\n",(unsigned long)pthread_self());
pthread_join(t1,NULL);
pthread_join(t2,NULL);pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond); //条件销毁return 0;
}
运行结果:
main:140059308766976
t1:140059300480768 this is creat
t1:pram is 100
t2:140059292088064 this is creat
t2:pram is 100
t2 :0
t2 :1
t2 :2
ti run================
t1 :3
t2 :0
t2 :1
t2 :2
ti run================
t1 :3
t2 :0
^C