linux 多线程(一)条件变量
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
int gnum = 0;
int gsub = 100;
pthread_mutex_t mutex;
pthread_cond_t cond; //条件变量
void pthread_func_1 (void);
void pthread_func_2 (void);
int main (void)
{
pthread_t pt_1 = 0;
pthread_t pt_2 = 0;
int ret = 0;
pthread_mutex_init (&mutex, NULL); //默认情况下 互斥初始化后是解锁状态可用
pthread_cond_init(&cond,NULL); //
//pthread_cond_init(指向pthread_cond_t的指针,属性设置<NULL>默认属性)
ret = pthread_create (&pt_1, NULL, (void *)pthread_func_1, NULL);
if (ret != 0)
printf("pthread_1_create");
ret = pthread_create (&pt_2, NULL, (void *)pthread_func_2, NULL);
if (ret != 0)
printf("pthread_2_create");
pthread_join (pt_1, NULL);
pthread_join (pt_2, NULL);
printf ("main programme exit!/n");
return 0;
}
void pthread_func_1 (void)
{
int i = 0;
printf ("pthread1 start running!\n");
while(gnum <= 100)
{
usleep (100);
pthread_mutex_lock(&mutex);
while (gnum == 50)
{
printf("supend thread1 at gnum=50!!!\n");
pthread_cond_wait(&cond, &mutex);
gnum++;
}
gnum++;
printf ("gnum=:%d\n",gnum);
pthread_mutex_unlock(&mutex); /*释放互斥锁*/
}
}
void pthread_func_2 (void)
{
int i=0;
printf ("pthread2 start running!\n");
while (gsub >= 0)
{
usleep (100) ;
pthread_mutex_lock(&mutex);//mutex被锁住后,线程在此被挂起,等待mutex变为解锁状态后,获得互斥锁,继续执行
gsub--;
printf ("gsub=:%d\n",gsub);
if (gsub == 20)
{
printf("resume thread1 at gsun = 20\n");
pthread_cond_signal(&cond);
}
pthread_mutex_unlock(&mutex);
}
pthread_exit (0);
}