免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2843 | 回复: 3

[C++] 这样设计程序退出对吗? [复制链接]

论坛徽章:
5
双鱼座
日期:2013-11-26 17:56:26狮子座
日期:2013-11-29 15:41:32处女座
日期:2014-02-21 11:59:07技术图书徽章
日期:2014-03-06 15:33:53技术图书徽章
日期:2014-03-06 15:39:30
发表于 2014-07-10 12:25 |显示全部楼层
有一个程序,需要接受可以用signal 15信号就可以退出,因为用signal 9程序是接收不到信号会直接退出的,然后在这个程序调用的过程中有一个函数会调用底层的共享内存,从而导致很小几率的core dump。

程序当中线程安排情况:
主线程1个,其他线程9个,其中,主线程和其他8个线程工作在一个第三方库的循环里面,只有一个线程(叫线程D吧)是自己创建的,那个线程D会调用底层的共享内存,其他的线程不会。

我的设计是这样的

在线程D里面:

run()
{
sigaction(SIGTERM, &sigterm_action, NULL);//当signal 15发过来的时候,sigterm_action将会被调用,他的作用是发送pthread_cancel(pthread_self());

pthread_cleanup_push(cleanup_handler, this);//当接受到pthread_cancel的信号之后,cleanup_handler会调用,这个里面会给所有的其他线程发送pthread_cancel然后自己退出。
while(1)
{
pthread_testcancel();
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
会调用共享内存的函数
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
}

pthread_cleanup_pop(0);
}


主线程里

pthread_cleanup_push(cleanup_handler, NULL);//主线程接受到从子线程传来的pthread_cancel之后,先调用pthread_join等待其他线程退出,然后自己再清除一下自己的残余资源也退出。
第三方的线程调用的函数,一调用主线程一直停在这里
pthread_cleanup_pop(0);


我的问题是,这样的设计会有缺陷吗?安全吗?

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
发表于 2014-07-11 15:47 |显示全部楼层
我觉得你懂的函数太多了....  用线程间通信,自行判断 该回收回收 该退出退出....

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-07-11 17:10 |显示全部楼层
hanzhenlll 发表于 2014-07-11 15:47
我觉得你懂的函数太多了


论坛徽章:
5
双鱼座
日期:2013-11-26 17:56:26狮子座
日期:2013-11-29 15:41:32处女座
日期:2014-02-21 11:59:07技术图书徽章
日期:2014-03-06 15:33:53技术图书徽章
日期:2014-03-06 15:39:30
发表于 2014-07-14 01:44 |显示全部楼层
回复 2# hanzhenlll


    请问您说的您的那种退出的方法应该怎么实现?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP