运用到了互斥量和条件变量,分别在主进程和子进程中循环。

子线程循环 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;
}

主线程和子线程分别循环一定次数相关推荐

  1. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  2. android子线程没有运行完,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    /* String ObjectResult="原先的结果"; //使用VOLLY框架(与问题无关) JsonObjectRequest jsonObjectRequest = n ...

  3. 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法

    最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...

  4. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

  5. java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  6. java等待5秒_Java并发编程-主线程等待子线程解决方案

    主线程等待所有子线程执行完成之后,再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.ou ...

  7. android 线程传递数据,Android Handle主线程向子线程发送数据

    一.前言: 今天,下载apk的时候,下载进度回调到主线程,主线程刷新通知栏,造成页面阻塞掉,不能点击页面(下载结束后,可以正常点击页面). 所以,要在进度回调发送消息到子线程,在子线程的Handler ...

  8. c语言主线程退出子线程,简单了解C语言中主线程退出对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于程序来说,如果主进程在子进程还未结束时 ...

  9. c++主线程和子线程

    c++主线程和子线程 最近在学习c++多线程,写一篇博客记录下自己的收获. 一.main()函数是主线程函数,在main()函数中创建的线程属于子线程,那主线程和子线程的优先级谁更高呢? 可以看下另外 ...

最新文章

  1. 屏蔽Drupal中的“Notice: Undefined index”警告
  2. 25个强大的 jQuery 砌体网页设计作品
  3. 为什么使用RLC表测量电感在不同的频率测量值不同呢?
  4. MongoDB集群之分片技术应用 —— 学习笔记
  5. 安装VMware Tools 灰色解决办法
  6. Tomcat可运行源码资源分享
  7. mybatis.xml文件
  8. CSS3实现多页签图片缩放切换效果
  9. 断电,软件崩溃,系统中毒,未点击保存,就关闭导致资料丢失,以word文件文件为例,如何找回
  10. Oracle10怎样调出左侧的表,excel2010菜单栏不见了!怎样在excel左侧显示导航
  11. Windows 下 PHP 开发环境配置系列二(使用 MODx CMS)
  12. 北京大学计算机语言学,基于认知的汉语计算语言学研究_袁毓林pdf
  13. Windows自动更新进程wuauclt.exe 进程服务关闭方法
  14. Java程序员的薪资取决于工作年限还是技术?
  15. 计算机视觉和机器学习_我从计算机视觉和机器学习硕士课程中学到的东西
  16. Vue实战教程:利用自定义实现鼠标拖动元素效果
  17. CVPR2020论文分方向整理之检测篇(代码/论文解读/136篇打包下载)
  18. Freesurfer的简单使用和一些基础知识
  19. sass-loader@13.2.0“ has unmet peer dependency “webpack@^5.0.0“
  20. 彻底关闭Windows10更新!!

热门文章

  1. 【CICC原创】面向全域作战态势感知的战场全息地图
  2. 概论_第3章_正态分布的重要结论__正态分布与标准正态分布关系
  3. 解决:FLASK中Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'
  4. 【cocos creater】4.仿《弓箭传说》- 创建游戏背景
  5. java面向对象编程 视频_Java8之面向对象编程视频教程
  6. 【coarse-to-fine:基于频谱和空间损失约束】
  7. 购物商城APP开发的优势和功能分析
  8. 视频笔记-吾爱破解ximo脱壳视频1~10
  9. 告诉大家一个不买到假U盘的方法
  10. 初中数学老师计算机培训反思,初中数学老师培训心得体会优秀范文五篇