ImageVerifierCode 换一换
格式:DOC , 页数:10 ,大小:82.50KB ,
资源ID:5998318      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-5998318.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多线程编程-监控线程.doc)为本站会员(gnk289057)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

多线程编程-监控线程.doc

1、多线程编程-监控线程1、监控线程概述 12、需求 13、示例 14、相关文献 91、监控线程概述不死线程常见于进程中的关键线程,即进程内其它线程的正常运行依赖于该线程,比如在网络编程中,负责与其它模块通信的 socket 线程等。如何保证关键线程始终运行,常用的方法有实现监控线程,当检测到某线程退出时,采取相应的动作,如:重启线程、重启进程、或重启整个系统。本文主要结合前面的基础,讨论如何实现监控线程、重启线程,达到不死的传说。2、需求(1) 利用多线程实现对两个线程(线程 1、线程 2)的监控,保证线程不死;(2) 利用信号量实现线程 1、线程 2 的同步:先启动线程 1,再启动线程 2。3

2、、示例/* 作者: Jeffrey.zhu * 功能: 线程监控示例* 日期: 2010 年 6 月* 联系方式: 墨客论文网: http:/* CSDN 博客:http:/ #include #include #include #include #include #include /* 线程触发标志 */enum PTHREAD_ID_NONE = -1, /* 未知状态 */ PTHREAD_ID_INIT = 0, /* 初始状态触发 */PTHREAD_ID1 = 1, /* 线程 1 触发 */PTHREAD_ID2 = 2, /* 线程 2 触发 */;enum PTHREAD_F

3、LAG_ON = 1, /* 标志打开 */PTHREAD_FLAG_OFF = 0, /* 标志关闭 */;/* 返回结果 */enum ERROR = -1, /* 失败 */OK = 0, /* 成功 */;static int start_pthread_flag = PTHREAD_ID_INIT; /* 触发线程标志 */static int pthread1_exit_flag = PTHREAD_FLAG_ON; /* pthread1 退出标志 */static int pthread2_exit_flag = PTHREAD_FLAG_ON; /* pthread2 退出标

4、志 */* 线程属性及 ID */static pthread_attr_t pthreads_attr; static pthread_t tmp_id = PTHREAD_ID_INIT; static pthread_t pthread1_id = PTHREAD_ID_INIT; static pthread_t pthread2_id = PTHREAD_ID_INIT;/*快速锁,对应于上文的本地全局变量 */static pthread_mutex_t start_pthread_flag_mutex = PTHREAD_MUTEX_INITIALIZER;static pthr

5、ead_mutex_t pthread1_id_mutex = PTHREAD_MUTEX_INITIALIZER;static pthread_mutex_t pthread2_id_mutex = PTHREAD_MUTEX_INITIALIZER;static pthread_mutex_t pthread1_exit_flag_mutex = PTHREAD_MUTEX_INITIALIZER;static pthread_mutex_t pthread2_exit_flag_mutex = PTHREAD_MUTEX_INITIALIZER;static int lock_var;s

6、tatic time_t end_time;static sem_t sem2;/* 接口声明 */static void pthread1(void *arg);static void pthread2(void *arg);static void pthread1_exit(void);static void pthread2_exit(void); static int pthreads_init(void);static void pthreads_deinit(void);/* 作者: Jeffrey.zhu* 功能: 主线程为监控线程* 联系方式: 墨客论文网: http:/* C

7、SDN 博客:http:/ main(int argc, char *argv)int res;end_time = time(NULL) + 30; /* 进程运行时间:30s */res = sem_init( if (0 != res) perror(“sem_init“);while (time(NULL) 10) pthread2_exit();sleep(2);/* 作者: Jeffrey.zhu * 功能: pthread1 线程退出函数* 联系方式: 墨客论文网: http:/* CSDN 博客:http:/ void pthread1_exit(void) pthread_m

8、utex_lock(pthread1_exit_flag = PTHREAD_FLAG_ON;pthread_mutex_unlock(/* kill 掉 pthread2 线程,防止 start_pthread_flag 判断之前的竞争 */if (0 = pthread_equal(pthread2_id, tmp_id) pthread_cancel(pthread2_id);pthread_mutex_lock(pthread2_id = PTHREAD_ID_INIT;pthread_mutex_unlock( pthread_mutex_lock(start_pthread_fla

9、g = PTHREAD_ID1;pthread_mutex_unlock(pthread_mutex_lock(pthread1_id = PTHREAD_ID_INIT;pthread_mutex_unlock(printf(“pthread1 is exit!n“);pthread_exit(NULL);/* 作者: Jeffrey.zhu * 功能: pthread2 线程退出函数* 联系方式: 墨客论文网: http:/* CSDN 博客:http:/ void pthread2_exit(void)pthread_mutex_lock(pthread2_exit_flag = PTH

10、READ_FLAG_ON;pthread_mutex_unlock(/* kill 掉 pthread1 线程 */if (0 = pthread_equal(pthread1_id, tmp_id) pthread_cancel(pthread2_id);pthread_mutex_lock(pthread1_id = PTHREAD_ID_INIT;pthread_mutex_unlock( pthread_mutex_lock(start_pthread_flag = PTHREAD_ID2;pthread_mutex_unlock(pthread_mutex_lock(pthread1

11、_id = PTHREAD_ID_INIT;pthread_mutex_unlock(printf(“pthread2 is exit!n“);pthread_exit(NULL);/* 作者: Jeffrey.zhu * 功能: 初始化函数* 联系方式: 墨客论文网: http:/* CSDN 博客:http:/ int pthreads_init(void)int opt = 1;int res;/* 互斥处理 */res = pthread_mutex_init(if (0 != res) printf(“pthreads_init():MUTEX INIT ERROR, reinitn

12、“);return ERROR;res = pthread_mutex_init(if (0 != res) printf(“pthreads_init():MUTEX INIT ERROR, reinitn“);return ERROR;res = pthread_mutex_init(if (0 != res) printf(“pthreads_init():MUTEX INIT ERROR, reinitn“);return ERROR;res = pthread_mutex_init(if (0 != res) printf(“pthreads_init():MUTEX INIT ER

13、ROR, reinitn“);return ERROR;res = pthread_mutex_init(if (0 != res) printf(“pthreads_init():MUTEX INIT ERROR, reinitn“);return ERROR;/* 线程属性处理 */res = pthread_attr_init(if (0 != res) printf(“pthread_attr_init():PTHREAD ATTR INIT ERROR, reinitn“);return ERROR;res = pthread_attr_setdetachstate(if (0 !=

14、 res) printf(“pthread_attr_setdetachstate():PTHREAD ATTR SET ERROR, reinitn“);return ERROR;return OK;/* 作者: Jeffrey.zhu * 功能: 资源释放函数* 联系方式: 墨客论文网: http:/* CSDN 博客:http:/ void pthreads_deinit(void)pthread_attr_destroy(pthread_mutex_destroy(pthread_mutex_destroy(pthread_mutex_destroy(pthread_mutex_des

15、troy(pthread_mutex_destroy(4、相关文献1、基于信号量的 Linux 多线程同步研究 中文摘要:信号量是进程或线程之间相互通讯的手段之一。有效地使用可以在多线程之间实现同步和互斥,以保证程序的正确的运行。在对线程的数据结构和相关的 10 个函数分析的基础上,以一个具体的例子给出如何使用信号量机制实现多线程之间的同步。摘自墨客论文网:http:/ Winsock 在导弹仿真中的应用 中文摘要:WindowsNT 的多线程能力适合处理并行性任务,在主线程中可以创建多个子线程,每 个子线程可以独立完成一个子任务,一个程序可以同时完成多个任务。使用多线程技术,既加快了系统的反

16、应速度,又提高了执行效率。该文介绍了 WindowsNT 环境下基于 MFC 的多线程编程技术的原理、线程间的通信及同步控制的方法,以及 Winsock 网络编程的原理。最后介绍了在微机局域网 (LAN)下采用多线程和 Winsock 编程技术进行空空导弹分布式实时仿真系统的设计过程。摘自墨客论文网:http:/ Java 线程 中文摘要:多线程程序是 Java 语言的一个很重要的特点。本文针对 Java 平台中线程的性质和应用程序的多线程策略进行了分析和讨论。摘自墨客论文网:http:/ 中文摘要:提出了一种面向小型工业的实时监控数据库解决方案。采用 ADO 技术与多线程技术解决了过 程监控系统中实时数据的存储、管理和处理的问题。利用 Visual C6.0语言编程,在自来水厂的 Ethernet 现场总线设备上对监控数据库进行试验运行 ,其性能稳定、运行可靠。摘自墨客论文网:http:/ Visual C实现工作者线程与主线程间的可靠、安全通讯 摘自墨客论文网:http:/ DLL 的应用 中文摘要:本文介绍了 Windows 环境下的多线程和动态链接库,及在数据采集和处理系统中的应用它们,从而提高系统的实时性和通用性。摘自墨客论文网:http:/ 线程实现机制分析摘自 IBM developerworks:http:/

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报