您的位置:首页 > 运维架构 > Linux

Linux编程之互斥锁线程控制

2016-04-25 16:30 573 查看
/*互斥锁线程控制*/
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

#define THREAD_NUMBER 3/*线程数*/
#define REPEAT_NUMBER 5 /*每个线程中的小任务数*/
#define DELAY_TIME_LEVELS 10.0 /*小任务之间的最大时间间隔*/
pthread_mutex_t mutex;

void *thrd_func(void *arg)
{
/*线程函数历程*/
printf("in thrd_func function\n");

int thrd_num=(int)arg;
int delay_time=0;
int count=0;
int res;

res=pthread_mutex_lock(&mutex);

if(res<0)
{
printf("thread %d lock failed\n",thrd_num);
pthread_exit(NULL);
}

printf("thread %d is starting\n",thrd_num);

for(count=0;count<REPEAT_NUMBER;count++)
{
delay_time=(int)(rand() * DELAY_TIME_LEVELS / (RAND_MAX))+1;
sleep(delay_time);
printf("\t thread %d :job %d delay=%d\n",thrd_num,count,delay_time);
}

printf("thread %d finished\n",thrd_num);

pthread_exit(NULL);

}

int main()
{
int no=0,res;
void *thrd_ret;
pthread_t thread[THREAD_NUMBER];  /*线程表示符*/

srand(time(NULL));

/*互斥锁初始化*/
pthread_mutex_init(&mutex,NULL);

for(no=0;no<THREAD_NUMBER;no++)
{
/*创建多线程*/
res=pthread_create(&thread[no],NULL,thrd_func,(void *)no);
/*if(res != 0);
{
//  printf("file\n");
printf("creat thread %d failed\n",no);
printf("filure ID is %d\n",res);
exit(res);
}  */
}  //end for

printf("creat treads success\n Waitting for thread to finish...\n");

for(no=0;no<THREAD_NUMBER;no++)
{
/*等待线程的结束*/
res=pthread_join(thread[no],&thrd_ret);

if(!res)
{
printf("Thread %d jioned\n",no);

}
else
{
printf("Thread %d jioned filed\n");

}
/*互斥解锁*/
pthread_mutex_unlock(&mutex);
}

pthread_mutex_destroy(&mutex);

return 0;
}


程序运行结果:



参考图书《从实践中学嵌入式Linux应用编程程序开发》

华清远见嵌入式学院 冯利美 编著

电子工业出版社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: