#include <stdio.h>
#include <stdlib.h>
#include <pthread.h> //多线程所用头文件
#include <semaphore.h> //信号量使用头文件
pthread_cond_t g_cond /*=PTHREAD_MUTEX_INITIALIZER*/; //申明条锁,并用宏进行初始化
pthread_mutex_t g_mutex ;
void *threadFun1(void *args)
{
int num = *((int *)args );
pthread_mutex_lock(&g_mutex); //1
pthread_cond_wait(&g_cond,&g_mutex); //如g_cond无信号,则阻塞
printf("after 5 seconds \n" );
printf("in %d\n",num );
pthread_cond_signal(&g_cond);
pthread_mutex_unlock(&g_mutex);
}
int main(void)
{
pthread_t id1; //线程的标识符
pthread_t id2;
pthread_cond_init(&g_cond,NULL); //也可以程序里面初始化
pthread_mutex_init(&g_mutex,NULL); //互斥变量初始化
int i,ret1 ,ret2;
int count1 = 1 ;
int count2 = 2 ;
ret1 = pthread_create(&id1,NULL,threadFun1, &count1);
ret2 = pthread_create(&id2,NULL,threadFun1, &count2);
sleep(5); //等待子线程先开始
printf("before send signal \n");
pthread_mutex_lock(&g_mutex); //2
pthread_cond_signal(&g_cond); //给个开始信号,注意这里要先等子线程进入等待状态在发信号,否则无效
pthread_mutex_unlock(&g_mutex);
printf("after send signal\n");
pthread_join(id1,NULL);
pthread_cond_destroy(&g_cond); //释放
pthread_mutex_destroy(&g_mutex); //释放
return 0;
}
输出:
before send signal
after send signal
after 5 seconds
in 1
after 5 seconds
in 2