/*
熟悉POSIX多线程编程技术?完成如下功能:
1)有一int型全局变量g_Flag初始值为0;
2)在主线称中起动线程1,打印“this is thread1”,并将g_Flag设置为1
3)在主线称中启动线程2,打印“this is thread2”,并将g_Flag设置为2
4)线程序1需要在线程2退出后才能退出
5)主线程在检测到g_Flag从1变为2,或者从2变为1的时候退出
*/
#include <stdio.h>
#include <stdlib.h>#include <pthread.h>
#include <errno.h>
#include <unistd.h>
int g_flag = 0;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* thread1(void*);
void* thread2(void*);
int main(int argc,char** argv)
{
printf("enter main\n");
pthread_t tid1,tid2;
int ret1 = 0 , ret2 = 0;
ret2 = pthread_create(&tid2,NULL,thread2,NULL);
if(ret2 != 0 )
printf("%s:%d\n",__func__,strerror(ret2));
ret1 = pthread_create(&tid1,NULL,thread1,&tid2);
if(ret1 != 0)
printf("%s:%d\n",__func__,strerror(ret1));
printf("leave main\n");
pthread_cond_wait(&cond,&mutex);
return 0 ;
}
void* thread1(void* arg)
{
pthread_t tid2 = *(pthread_t *)arg;
printf("thread1flag:%d \n",g_flag );
pthread_mutex_lock(&mutex);
if(g_flag == 2)
pthread_cond_signal(&cond);
g_flag = 1;
pthread_mutex_unlock(&mutex);
printf("thread1flag:%d\n",g_flag);
pthread_join(tid2,NULL);
pthread_exit(0);
}
void* thread2(void* arg)
{
printf("thread2flag:%d\n",g_flag);
pthread_mutex_lock(&mutex);
if(g_flag == 1)
pthread_cond_signal(&cond);
g_flag = 2;
pthread_mutex_unlock(&mutex);
printf("thread2flag:%d\n",g_flag);
pthread_exit(0);
}
参考:http://www.cnblogs.com/skynet/archive/2010/10/30/1865267.html