主线程和子线程分别循环一定次数
运用到了互斥量和条件变量,分别在主进程和子进程中循环。
子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。
编译的时候遇到两个问题:
1.C语言中不支持bool类型,所以需要自定义bool为int
2.for语言中,不支持for(int i=..),不然会报一个'for' loop initial declarations are only allowed in C99 mode错误。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define bool int
#define true 1
#define false 0pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int i = 0;
int main_count=0;
int subtread_count=0;
bool main_thread_wait_flag = false;//线程等待标志
bool subthread_wait_flag = false;void main_thread_func()
{while(true){pthread_mutex_lock(&mylock);main_thread_wait_flag = true;pthread_cond_wait(&cond,&mylock);main_thread_wait_flag = false;pthread_mutex_unlock(&mylock);for(i=1;i<=100;i++){printf("main thread: %d\n",i);}while(true){pthread_mutex_lock(&mylock);if(true == subthread_wait_flag){pthread_cond_signal(&cond);pthread_mutex_unlock(&mylock);break;}pthread_mutex_unlock(&mylock);}++main_count;if(main_count >= 50){printf("main thread loop over 50 times\n");break;}}
}void *subthread_func(void *arg)
{while(true){for(i=1;i<=10;i++){printf("subthread: %d\n",i);}while(true){pthread_mutex_lock(&mylock);if(true == main_thread_wait_flag){pthread_cond_signal(&cond);pthread_mutex_unlock(&mylock);break;}pthread_mutex_unlock(&mylock);}pthread_mutex_lock(&mylock);subthread_wait_flag = true;pthread_cond_wait(&cond,&mylock);subthread_wait_flag = false;pthread_mutex_unlock(&mylock);++subtread_count;if(subtread_count >= 50){printf("subthread loop over 50 times\n");break;}}return (void *)0;
}int main()
{pthread_t tid;pthread_create(&tid,NULL,subthread_func,NULL);main_thread_func();pthread_join(tid,NULL);return 0;
}
主线程和子线程分别循环一定次数相关推荐
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- android子线程没有运行完,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...
/* String ObjectResult="原先的结果"; //使用VOLLY框架(与问题无关) JsonObjectRequest jsonObjectRequest = n ...
- 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法
最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...
- Java主线程等待子线程、线程池
public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...
- java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...
之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...
- java等待5秒_Java并发编程-主线程等待子线程解决方案
主线程等待所有子线程执行完成之后,再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.ou ...
- android 线程传递数据,Android Handle主线程向子线程发送数据
一.前言: 今天,下载apk的时候,下载进度回调到主线程,主线程刷新通知栏,造成页面阻塞掉,不能点击页面(下载结束后,可以正常点击页面). 所以,要在进度回调发送消息到子线程,在子线程的Handler ...
- c语言主线程退出子线程,简单了解C语言中主线程退出对子线程的影响
这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于程序来说,如果主进程在子进程还未结束时 ...
- c++主线程和子线程
c++主线程和子线程 最近在学习c++多线程,写一篇博客记录下自己的收获. 一.main()函数是主线程函数,在main()函数中创建的线程属于子线程,那主线程和子线程的优先级谁更高呢? 可以看下另外 ...
最新文章
- 屏蔽Drupal中的“Notice: Undefined index”警告
- 25个强大的 jQuery 砌体网页设计作品
- 为什么使用RLC表测量电感在不同的频率测量值不同呢?
- MongoDB集群之分片技术应用 —— 学习笔记
- 安装VMware Tools 灰色解决办法
- Tomcat可运行源码资源分享
- mybatis.xml文件
- CSS3实现多页签图片缩放切换效果
- 断电,软件崩溃,系统中毒,未点击保存,就关闭导致资料丢失,以word文件文件为例,如何找回
- Oracle10怎样调出左侧的表,excel2010菜单栏不见了!怎样在excel左侧显示导航
- Windows 下 PHP 开发环境配置系列二(使用 MODx CMS)
- 北京大学计算机语言学,基于认知的汉语计算语言学研究_袁毓林pdf
- Windows自动更新进程wuauclt.exe 进程服务关闭方法
- Java程序员的薪资取决于工作年限还是技术?
- 计算机视觉和机器学习_我从计算机视觉和机器学习硕士课程中学到的东西
- Vue实战教程:利用自定义实现鼠标拖动元素效果
- CVPR2020论文分方向整理之检测篇(代码/论文解读/136篇打包下载)
- Freesurfer的简单使用和一些基础知识
- sass-loader@13.2.0“ has unmet peer dependency “webpack@^5.0.0“
- 彻底关闭Windows10更新!!
热门文章
- 【CICC原创】面向全域作战态势感知的战场全息地图
- 概论_第3章_正态分布的重要结论__正态分布与标准正态分布关系
- 解决:FLASK中Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'
- 【cocos creater】4.仿《弓箭传说》- 创建游戏背景
- java面向对象编程 视频_Java8之面向对象编程视频教程
- 【coarse-to-fine:基于频谱和空间损失约束】
- 购物商城APP开发的优势和功能分析
- 视频笔记-吾爱破解ximo脱壳视频1~10
- 告诉大家一个不买到假U盘的方法
- 初中数学老师计算机培训反思,初中数学老师培训心得体会优秀范文五篇