linux中线程的挂起与恢复(进程暂停)

在网上查了一下 linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制。也没有完整详细的代码。故自己整理了一下

程序流程为:主线程创建子线程(当前子线程状态为stop停止状态),5秒后主线程唤醒子线程,10秒后主线程挂起子线程,15秒后主线程再次唤醒子线程,20秒后主线程执行完毕等待子线程退出。

代码如下:
#include
#include
#include
#include
#include

#define RUN 1
#define STOP 0

pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

int status = STOP;
void * thread_function(void)
{
   static int i = 0;
   while (1) 
   {   
       pthread_mutex_lock(&mut);
       while (!status)
       {
           pthread_cond_wait(&cond, &mut);
       }
       pthread_mutex_unlock(&mut);
   
       printf("child pthread %d\n", i++);
       if (i == 20) 
           break;
       sleep(1);
   }   
}

void thread_resume()
{
   if (status == STOP)
   {   
       pthread_mutex_lock(&mut);
       status = RUN;
       pthread_cond_signal(&cond);
       printf("pthread run!\n");
       pthread_mutex_unlock(&mut);
   }   
   else
   {   
       printf("pthread run already\n");
   }   
}

void thread_pause()
{
   if (status == RUN)
   {   
       pthread_mutex_lock(&mut);
       status = STOP;
       printf("thread stop!\n");
       pthread_mutex_unlock(&mut);
   }   
   else
   {   
       printf("pthread pause already\n");
   }
}

int main()
{
   int err;
   static int i = 0;
   pthread_t child_thread;

#if 0
   if (pthread_mutex_init(&mut, NULL) != 0)
       printf("mutex init error\n");
   if (pthread_cond_init(&cond, NULL) != 0)
       printf("cond init error\n");
#endif

   err = pthread_create(&child_thread, NULL, (void *)thread_function, NULL);
   if (err != 0 )
       printf("can't create thread: %s\n", strerror(err));
   while(1)
   {
       printf("father pthread %d\n", i++);
       sleep(1);
       if (i == 5)
           thread_resume();
       if (i == 10)
           thread_pause();
       if (i == 15)
           thread_resume();
       if (i == 20)
           break;
   }
   if (0 == pthread_join(child_thread, NULL))
       printf("child thread is over\n");
   return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

荣耀智慧屏评测 鸿蒙OS加持,荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视...

原标题:荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视 来源:TechWeb.com.cn当华为选择在今年公布鸿蒙OS系统后,很多人都在期待它的庐山真面目。无论是以后非常时期不再受制于人,或是循序渐进将系统过渡给自家设备&a…

c位边上还有什么位_【一点资讯】那些有趣而搞笑的GIF动画:为让出c位,站边上拍照还是谦虚礼貌的 www.yidianzixun.com...

1_为让出c位,站边上拍照,还是谦虚礼貌的,2_最后都吓死我了!3_啥情况?4_今年工作太难了,回家种地卖水果吧5_除了电池差了一点,12应该是最完美的手机了吧精选搞笑图文:小王去女朋友家里…

两个有用的minicom命令

minicom执行后,一个屏幕显示的字符有限,如果需要查看之前的串口通讯记录,可以使用Ctrl-A B使用进入串口通讯记录查询模式。如果需要将minicom的串口通讯记录保存到某个文件,可以在minicom刚启动时用Ctrl-A L命令进入串口通讯捕捉模…

2021河南固高高考成绩查询,河南信阳最好的4所高中,前三所学霸如云,看看有没有你的母校?...

河南省信阳市处于豫之南,鄂之北。南边是连绵的群山,北边是广袤的平原。千里淮河,曲折盘旋,它的源头便是这里。都说信阳是一个神奇的地方,一点儿也不为过,狮河穿城而过,周围群山环抱,…

python库读取cif文件_Pymatgen读/写各种文件,pymatgen,读写

pymatgen读/写各种文件pymatgen是材料大数据计算的必备程序包了,其也作为API与materials project对接,可以批量下载自己想要的材料结构、性质,它也提供了大量VASP计算后的数据处理、计算,堪称材料基因组学的神器!pymat…

磁盘的磁道(Track)

写这篇文章,主要是为了解决长久以来的一个困惑。由此也可以看出偶以前确实不太聪明。 哈哈(虽然现在仍然还是) 以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解…

Android SDK Manager 在win8.1上的闪退问题【转载】

全新安装的Windows 8.1的系统,Android SDK,JDK都是最新的版本,但是SDK Manager打开是命令行窗口一闪而过,就再没反映了。 通过搜索,确定了一个问题就是SDK目录tools\lib下有个find_java.bat,本来的作用是查…

centos 卸载_CentOS安装mysql

安装mysql第一步,查看是否安装:rpm -qa| grep mysql-server没有我们就开始安装,点击 这里,获取下载页面,按照图示选择合适的版本:第二步,进入/usr/local/soft/目录,在里面执行wget 下…

考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)

一、考试目的考查考生是否具备证券期货监管工作所必需的计算机专业知识和相关知识的应用能力。二、考试内容与试卷结构考试形式为笔试,考试时间120分钟,满分100分。报考计算机类职位的考生参加本类别的专业科目考试。计算机类专业科目考试试题由以下两部…

qt 初学

1. qt4中没有setMainWidget函数&#xff0c;直接删除即可 2. 找不到QtNetWork头文件&#xff0c;在pro文件中增加 QT network 3. 打印QString qDebug() << QString对象 4. int 转 QString QString::number(int) 5. QStringList使用 QStringList wor…

细数改善WPF应用程序性能的10大方法

WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密&#xff0c;给用户的感觉是它太吃资源了&#xff0c;WPF程序的性能和硬件确实有很大的关系&#xff0c;越高档的机器性能越有优势。 程序性能改善不是一蹴而就的&#xff…

javaweb宿舍管理系统源码_宿舍信息管理系统展示

宿舍信息管理系统今天整理学习笔记的时候发现了自己当时学SSM框架的时候写了一个简单的Javaweb宿舍信息管理系统&#xff0c;虽然现在看来写的不是很好&#xff0c;但今日写此文章也算是纪念自己的第一个SSM小项目了&#xff0c;话不多说&#xff0c;直接开始。项目简介&#x…

Qt UDP的初步使用

为了使用Qt自带的Socket进行网络编程&#xff0c;先必须熟悉Socket编程的原理&#xff0c;另外还需对Qt一些基本类的操作比较熟悉。由于刚接触不久&#xff0c;所以还是以看人家的代码来学习。这次主要是学Qt下UDP的编程&#xff0c;且熟悉一些Qt下代码的编写流程&#xff0c;所…

下列哪一项不是计算机网络的典型应用,09级计算机信息网络试卷A

…………密…………封…………线…………内…………请…………不…………要…………答…………题…………河北工程大学11~12学年第二学期期末考试试卷A一、填空题(每空1分&#xff0c;共10分)1、在因特网中&#xff0c;远程登录Telnet系统采用的应用工作模式为____客户机&#…

hdu 4452

今天模拟赛的一个模拟题&#xff1b; 每次看到这种题就感觉很繁琐&#xff1b; 这次静下心来写写&#xff0c;感觉还不错&#xff01;就是很多错误&#xff0c;浪费了一点时间&#xff1b; 代码&#xff1a; 1 #include<cstdio>2 #include<cstring>3 using namespa…

wincc怎么做数据库_wincc7.4 数据库的建立与查询

要是时间足够&#xff0c;建议学习以下内容&#xff1a;1&#xff0c;数据库基础&#xff0c;学习建库建表&#xff0c;以及基本的查询操作。如果数据需要处理的话也需要学习一下聚合函数。2&#xff0c;VBS脚本。做数据库的话建议用VBS&#xff0c;学起来和用起来简单一些。主…

uboot 的i2c_read

int i2c_read(u8 dev, //i2c设备地址 uint addr, //读i2c设备的数据起始地址&#xff0c;比如e2 int alen, //e2的地址位数&#xff0c;0为8位&#xff0c;1为16位&#xff0c;2为32位 u8 *data, //…

固定资产管理有关的计算机知识,计算机技术在固定资产管理中的具体应用.pdf...

计算机技术在固定资产管理中的具体应用2Ol6年 I2月 太 原 学 院 学 报 Vo1&#xff0e;34 No&#xff0e;4第 34卷 第 4期Dec&#xff0e; 2016计算机技术在固定资产管理中的具体应用赵丽敏(硅湖职业技术学院&#xff0c;江苏 昆山215300)摘 要 &#xff1a;固定资产 管理是 一…

弹出键盘,UIView 上移

声明欢迎转载&#xff0c;但是请尊重作者劳动成果&#xff0c;转载请保留此框内声明&#xff0c;谢谢。 文章出处&#xff1a;http://blog.csdn.net/iukey //--------------------------------------------------------------------------------------------------------------…

hdfs如何查找指定目录是否文件_在shell中如何判断HDFS中的文件目录是否存在

原标题&#xff1a;在shell中如何判断HDFS中的文件目录是否存在在Linux文件系统中&#xff0c;我们可以使用下面的Shell脚本判断某个文件是否存在&#xff1a;# 这里的-f参数判断$file是否存在if[ ! -f "$file"]; thenecho"文件不存在!"fi但是我们想判断HD…