C多线程练习题
来源:互联网 发布:淘宝客app免费制作 编辑:程序博客网 时间:2024/06/05 17:48
题目:
子线程循环 3 次,接着主线程循环 6 次,接着又回到子线程循环 3 次,接着再回到主线程又循环6 次,如此循环50次,试写出代码。
程序:
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- int main_flog = 0;
- int sub_flog = 0;
- int main_count = 0;
- int sub_count = 0;
- void *sub_thread_func(void *argv);
- void main_thread_func();
- int main()
- {
- pthread_t tid;
- int ret;
- pthread_mutex_init(&mutex,NULL);
- pthread_cond_init(&cond,NULL);
- ret = pthread_create(&tid,NULL,sub_thread_func,NULL);
- if(ret == -1)
- {
- perror("pthread_create errpr!\n");
- exit(-1);
- }
- main_thread_func();
- ret = pthread_join(tid,NULL);
- if(ret == -1)
- {
- printf("pthread_join error!\n");
- exit(-1);
- }
- return 0;
- }
- void *sub_thread_func(void *argv)
- {
- int i;
- while(1)
- {
- sub_count++;
- for(i = 1; i <= 3; i++)
- {
- printf("sub pthread%d:%d\n",sub_count,i);
- }
- while(1)
- {
- pthread_mutex_lock(&mutex);
- if(main_flog == 1)
- {
- pthread_cond_signal(&cond);
- pthread_mutex_unlock(&mutex);
- break;
- }
- pthread_mutex_unlock(&mutex);
- }
- pthread_mutex_lock(&mutex);
- sub_flog = 1;
- pthread_cond_wait(&cond,&mutex);
- sub_flog = 0;
- pthread_mutex_unlock(&mutex);
- //sub_count++;
- if(sub_count >= 50)
- {
- printf("sub_pthread loop 50 times!\n");
- break;
- }
- }
- return (void *)0;
- }
- void main_thread_func(void)
- {
- int i;
- while(1)
- {
- main_count++;
- pthread_mutex_lock(&mutex);
- main_flog = 1;
- pthread_cond_wait(&cond,&mutex);
- main_flog = 0;
- pthread_mutex_unlock(&mutex);
- for(i = 1; i <= 6; i++)
- {
- printf("main phread%d:%d\n",main_count,i);
- }
- while(1)
- {
- pthread_mutex_lock(&mutex);
- if(sub_flog == 1)
- {
- pthread_cond_signal(&cond);
- pthread_mutex_unlock(&mutex);
- break;
- }
- pthread_mutex_unlock(&mutex);
- }
- //main_count++;
- if(main_count >= 50)
- {
- printf("main_phread loop 50 times!\n");
- break;
- }
- }
- }
0 0
- C多线程练习题
- 多线程练习题
- 多线程练习题
- 多线程练习题
- C练习题
- C练习题
- c练习题
- c练习题
- c练习题
- [c] 练习题
- [c] 练习题
- 多线程练习题(一)
- 多线程练习题(一)
- 多线程练习题(二)
- 多线程练习题(三)
- java--多线程练习题
- Java多线程---生产者消费者练习题
- C#.NET程序设计 练习题
- 栈的运用
- 9.Ubuntu16.04Docker的CS模式
- Qt实现两个非模态窗口的数据传递(信号与槽方式)
- 前馈神经网路的权值初始化方法
- 10.Ubuntu16.04守护进程的配置和操作
- C多线程练习题
- 字符设备和快设备的区别
- 数据结构实验之排序二:交换排序
- 11.Ubuntu16.04Dockerfile指令
- CSS结构和层叠
- 数据冒险
- Caffe安装:Ubuntu16.04 + GPU + CUDA-8.0 + cuDNN v5.1 + OpenCV 3.0.0 + Anaconda2
- 求两个整数模的逆元
- SML-大数运算问题