Linux多线程──主线程和子线程分别循环一定次数
来源:互联网 发布:上海u盘数据恢复 编辑:程序博客网 时间:2024/05/17 07:20
子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。
要注意条件变量的自动复位问题。参看这篇文章:Linux 的多线程编程的高效开发经验
代码:
#include <pthread.h>#include <stdio.h>// 互斥锁,条件变量pthread_mutex_t mutex;pthread_cond_t cond;// 循环次数int main_count = 0;int subthread_count = 0;// 线程等待标志bool main_thread_wait_flag = false;bool subthread_wait_flag = false;void main_thread_func();void *subthread_func(void *arg);int main(int argc, char **argv){ pthread_t tid; pthread_mutex_init(&mutex, NULL); pthread_cond_init(&cond, NULL); pthread_create(&tid, NULL, subthread_func, NULL); main_thread_func(); pthread_join(tid, NULL); return 0;}void main_thread_func(){ while (true) { pthread_mutex_lock(&mutex); main_thread_wait_flag = true; pthread_cond_wait(&cond, &mutex); main_thread_wait_flag = false; pthread_mutex_unlock(&mutex); for (int i = 1; i <= 100; ++i) { fprintf(stdout, "main thread: %d\n", i); } while (true) { pthread_mutex_lock(&mutex); if (true == subthread_wait_flag) { pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); break; } pthread_mutex_unlock(&mutex); } ++main_count; if (main_count >= 50) { fprintf(stdout, "main thread loop 50 times\n"); break; } }}void *subthread_func(void *arg){ while (true) { for (int i = 1; i <= 10; ++i) { fprintf(stdout, "subthread: %d\n", i); } while (true) { pthread_mutex_lock(&mutex); if (true == main_thread_wait_flag) { pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); break; } pthread_mutex_unlock(&mutex); } pthread_mutex_lock(&mutex); subthread_wait_flag = true; pthread_cond_wait(&cond, &mutex); subthread_wait_flag = false; pthread_mutex_unlock(&mutex); ++subthread_count; if (subthread_count >= 50) { fprintf(stdout, "subthread loop 50 times\n"); break; } } return (void *)0;}
- Linux多线程──主线程和子线程分别循环一定次数
- Linux多线程──主线程和子线程分别循环一定次数
- Linux多线程──主线程和子线程分别循环一定次数
- 主线程和子线程分别循环一定次数
- 主线程和子线程中的消息循环
- 多线程demo-主线程和子线程交替运行
- 子线程主线程循环交替执行
- 主线程和子线程
- 主线程和子线程
- 主线程和子线程
- Linux主线程接收数据,子线程分别对其操作后输出
- 多线程之主线程与子线程
- 多线程NSThread+主线程子线程
- Python 多线程,主线程与子线程
- java多线程: 子线程循环10次,主线程接着循环100次,如此循环50次
- Java多线程面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次
- 多线程学习--案例-子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次
- 多线程面试题:子线程循环10次,接着主线程循环100次;接着回到子线程循环10次,然后再回到主线程循环100次,如此交替50次。
- 算法导论 第13章 红黑树
- CSS颜色大全
- JDBC 增删改查
- 存储结构之参数文件
- 一篇入门级的介绍javascript解释器实现的文章
- Linux多线程──主线程和子线程分别循环一定次数
- RAID5和RAID10在磁盘读写选择对比
- Javascript学习系列(二):图片浏览器的核心——图片预加载
- oracle scn之基本概念
- Activity中UI框架基本概念
- Activity的启动和创建
- 正视自己
- 通过菜单项启动其它程序-Alternative Menus
- Spring对Hibernate的事务支持