您尚未登录。

#1 2023-08-31 22:40:32

xiao80
会员
注册时间: 2021-11-14
帖子: 68

关于 pthread 的一点疑惑:如何终止 pthread

根据查阅的资料,要想终止线程,似乎要使用 pthread_cancel ,然而这个接口只是发送一个信号,而不是真正的立即终止线程的执行,只有当线程运行到取消点的时候,才会响应到这个信号,停止执行。

我的疑惑是,如果是这样根据埋点去调度线程,那么如果进入了一个 cpu 密集函数调用,岂不是根本就没机会终止它的执行吗?如果调用了第三方接口,没办法控制里面的埋点的时候,不也是一样没办法终止它的执行吗?就好像是明明知道耗时的地方在哪里,但就是没法及时终止它,终止的意义又在哪里呢?

我想进程的调度应该不是这个样子的吧,不然程序忙起来了,停都停不掉。为啥线程不能想进程一样调度呢?


另外去看了下 java 的 Thread ,其中的 interrupt 方法有点 pthread_cancel 的味道;同时它还提供了一个 stop 方法,这个方法是立即终止线程,虽然已经废弃,但是我还是好奇,它的底层在 linux 下面不还是一个 pthread 吗,pthread 都没有相关的接口,java 又是怎么实现的呢。

最近编辑记录 xiao80 (2023-08-31 22:51:20)

离线

#2 2023-08-31 23:14:17

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,487
个人网站

Re: 关于 pthread 的一点疑惑:如何终止 pthread

pthread_kill

离线

#3 2023-08-31 23:33:57

xiao80
会员
注册时间: 2021-11-14
帖子: 68

Re: 关于 pthread 的一点疑惑:如何终止 pthread

依云 说:

pthread_kill

哎,网上的东西也真是一言难尽,搜到的全是 pthread_cancel ,就没见着 pthread_kill 。

离线

#4 2023-08-31 23:36:51

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,487
个人网站

Re: 关于 pthread 的一点疑惑:如何终止 pthread

所以直接 man pthread<tab> 就好啦。

离线

#5 2023-09-01 00:20:01

xiao80
会员
注册时间: 2021-11-14
帖子: 68

Re: 关于 pthread 的一点疑惑:如何终止 pthread

依云 说:

所以直接 man pthread<tab> 就好啦。

顺便再请教一下,arch 里那些常用 c 函数库的文档一般在什么样的包里呢?

之前在 freebsd 里倒是经常看到很多 c 函数以及系统相关的 manul ,默认安装的,觉得还挺不错的!arch 下面默认安装肯定是没有的,也不知道在哪些包里。以前也一直想着要是 linux 内核文档也打包了话,想查某些东西的时候也不用跑去网上看了。

我的机子上目前没有见着 pthread 相关的文档。

离线

#6 2023-09-01 00:28:28

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,487
个人网站

Re: 关于 pthread 的一点疑惑:如何终止 pthread

有很多在 man-pages 这个包里。另外 https://man.archlinux.org/ 可以看所有 Arch 官方仓库里的 man 文档。
内核文档在 linux-docs 这个包里。

离线

#7 2023-09-01 00:31:38

xiao80
会员
注册时间: 2021-11-14
帖子: 68

Re: 关于 pthread 的一点疑惑:如何终止 pthread

依云 说:

有很多在 man-pages 这个包里。另外 https://man.archlinux.org/ 可以看所有 Arch 官方仓库里的 man 文档。
内核文档在 linux-docs 这个包里。

好的,现在就安装。:lol

离线

#8 2023-09-01 00:44:38

xiao80
会员
注册时间: 2021-11-14
帖子: 68

Re: 关于 pthread 的一点疑惑:如何终止 pthread

pthread_kill 原来是在 signal.h 里面,难怪网上查到的都不怎么提。刚才还纳闷,跑去 /usr/include/pthread.h 里怎么没查到这个函数呢。

离线

页脚