#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#define THREAD_NUMS 3
#define DES_CNTS 30
static int g_cnt = 0;
pthread_mutex_t mutex_cnt = PTHREAD_MUTEX_INITIALIZER;
static void *fun(void *arg)
{
int i = (int )arg;
while ( 1 )
{
pthread_mutex_lock( &mutex_cnt );
if ( g_cnt >= DES_CNTS )
{
pthread_mutex_unlock( &mutex_cnt );
break;
}
g_cnt++;
printf("thread_seq=%d, pid=%d, tid=%ld, cnt=%d\n", i, getpid(),pthread_self(),g_cnt);
pthread_mutex_unlock( &mutex_cnt );
sleep(1);
}
return NULL;
}
int main(void)
{
int i=0, err=0;
pthread_t pid[THREAD_NUMS];
//pthread_mutex_init(&mutex_cnt,NULL);
for( i=0; i<THREAD_NUMS; i++ )
{
if ( (err = pthread_create(&pid[i], NULL, fun, (void *) i)) != 0 )
{
printf("create thread failed: %s\n", strerror(err));
return -1;
}
}
printf("main thread, pid=%d\n",getpid());
for ( i=0; i<THREAD_NUMS; i++ )
{
if ( (err = pthread_join(pid[i],NULL)) != 0 )
{
printf("join thread failed:%s\n",strerror(err));
return -2;
}
}
return 0;
}
运行结果:
![](http://static.oschina.net/uploads/space/2014/0319/185934_Y6Yv_204888.png)