*题目来源网络,代码个人所写,仅供参考,帮助理解。
/*********** 多线程 ******************
主线程启动i=10个线程。无论启动顺序,执行顺序必须为
线程1、线程2、线程3、。。。
*****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#define DEBUG 0
pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_lock = PTHREAD_COND_INITIALIZER;
int num = 0;
void *pthread_func(void *arg)
{
int ret;
int i = (int)arg;
sleep(10-i);
pthread_mutex_lock(&mutex_lock);
while(i != num)
{
#if DEBUG
printf("pthread %d waiting.\n",i);
#endif
ret = pthread_cond_wait(&cond_lock,&mutex_lock);
#if DEBUG
if(ret == 0)
printf("pthread %d wait success.\n",i);
else
printf("pthread %d wait failed.---ERR:%s",i,strerror(errno));
#endif
}
sleep(5);
num++;
sleep(0);
printf("----pthread %d running.--num = %d\n",i, num);
pthread_mutex_unlock(&mutex_lock);
pthread_cond_broadcast(&cond_lock);
return (void*)i;
}
int main()
{
extern int errno;
int i,err,val;
pthread_t tid[10];
for(i=0;i<10;i++)
{
err = pthread_create(&tid[i], NULL, pthread_func, (void*)i);
if(err != 0)
{
printf("Create ERR:%s\n",strerror(errno));
return -1;
}
}
for(i=0;i<10;i++)
{
err = pthread_join(tid[i], (void*)&val);
if(err != 0)
{
printf("Join ERR:%s\n",strerror(errno));
return -1;
}
//printf("pthread %d :return val = %d\n",i,(int)val);
}
return 0;
}
/******************************************************************
子线程循环10此,接着主线程循环100次,
接着又回到子线程循环10次,接着再回到主线程又循环100次。
如此循环50次。
子10次--主100次 ---> 1次循环
*******************************************************************/
#include <stdio.h>
#inclu