免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3350 | 回复: 13
打印 上一主题 下一主题

[函数] 有木有办法从A线程里找到B线程的pthread_t? [复制链接]

论坛徽章:
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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-22 01:52 |只看该作者 |倒序浏览
我想从A线程调用pthread_cancel取消掉B线程,问题是B线程是第三方库里面created出来的,所以通过pthread_self()或者create thread得到都不可能,gettid这个得到的id不是pthread_t的id,所以请教各位大大有木有什么其他方法?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2014-07-22 08:30 |只看该作者
pthread_cancel 只有非常牛逼的人才用他,你懂的。安卓的pthread,这个函数直接就不存在。

论坛徽章:
0
3 [报告]
发表于 2014-07-22 08:52 |只看该作者
本帖最后由 anders0913 于 2014-07-22 08:53 编辑

对于线程,最好的实现是让它自己退出。也就是说,你可以让A线程改变一个变量,然后B线程检测变量值,自行判断是否退出。说成消息也行,也就是让消息驱动。

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
4 [报告]
发表于 2014-07-22 09:33 |只看该作者
强制进程退出很可能导致不可预见的错误  

3#的方法就很实用

论坛徽章:
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
5 [报告]
发表于 2014-07-22 09:47 |只看该作者
回复 3# anders0913


    我有3个线程,2个线程都是第三方驱动的,就是调用一个第三方的库,他自己就出来一个线程了,你说的设置变量怎么弄呢?其中一个线程是自己创造的,可以自己控制,让这个线程退出是可以的,但是光让它退出没用,要其他2个线程也一起退出程序才可以退出额。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2014-07-22 09:51 |只看该作者
bottles 发表于 2014-07-22 09:47
回复 3# anders0913


难道第三方库没有提供停止线程的接口?

论坛徽章:
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
7 [报告]
发表于 2014-07-22 10:00 |只看该作者
回复 6# hellioncu


    额。。这个好像也是一条路额。。我之前一直考虑怎么把他们的tid找到,因为那些线程是在底层调用的,要找到有没有这种停止的接口可能不是一件容易的事情额,不过我可以试着销毁他们一下看看。

论坛徽章:
0
8 [报告]
发表于 2014-07-22 14:16 |只看该作者
回复 5# bottles


    我不了解你场景,但我想,你既然已经让自己的线程退出了,是不是整个process也要退出了?如果是的,就强制整个进程退出即可,至于库启动的2个线程,就不用自己管了,让process退出时候自动清理掉好了。

论坛徽章:
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
9 [报告]
发表于 2014-07-22 15:35 |只看该作者
本帖最后由 bottles 于 2014-07-22 15:36 编辑

回复 8# anders0913


    关键就系,我自己可以控制的那个线程退出了,但是程序还在运行。。然后我想通过调用一些销毁函数销毁掉其他线程,然后程序就一直挂在那里了,gdb 了一下发现挂在__lll_lock_wait () from /lib64/libpthread.so.0这里面了。

论坛徽章:
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
10 [报告]
发表于 2014-07-22 17:03 |只看该作者
回复 8# anders0913


    原来是主线程卡住了,我之后调用pthread_exit主线程就能退出了,我一直以为这个函数是线程退出的时候默认调用的额?只是这样做不管其他线程会不会不安全额?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP