微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pthread_join是如何实现的?

我有点新的线程,所以你不得不原谅这个问题的天真。

pthread_join是如何实现的,它是如何影响线程调度的?

我总是用一个while循环来描述pthread_join实现,只是让调用线程产生,直到目标线程完成。 像这样(非常近似的伪代码):

primefaces布尔完成;

thread_run {

做东西();

done = true;

}

thread_join {

while(!done){

thread_yield();

基本上,使调用“join”的线程

//我们的线程产生,直到我们的线程完成

}

}

这是一个准确的描述,还是我极大地简化了这个过程?

是否有可能从sched_entityfind相应的task_struct?

Windows计划任务重新启动后不工作

我们应该为通知组件使用哪个“平台”?

我怎么知道一个过程的最后一个调度时间

Quartz.NET与Windows计划任务。 他们有什么不同?

干杯!

nohup与现在的区别

sched_getcpu()在Linux上可靠吗?

用户线程是否可以直接进入内核而不是被调用的内核线程?

在进程中调度线程

如何设置.NET框架的作业调度?

是的,这是一般的想法。 有关特定实现的细节,请看glibc 。

pthread_join可能在内部实现为等待线程退出时触发的信号量,无论是在调用pthread_exit还是在其主函数退出时触发。

在任何情况下,glibc的源代码是可用的,尝试谷歌代码搜索(我看到了一些信息的东西在那里)

一个线程通常有一个相关的小结构,即线程上下文。 这个结构可以塞满使线程“工作”所需的所有数据。

例如,访问该线程的线程特定键所需的数据结构的根,并在关闭时迭代它们以清除它们。

在这个结构中通常有一个类似于互斥体的锁,对于不同的部分也许有一个以上的锁。

线程上下文可以有一个小字段在终止线程可以放置其退出状态。 ( void *由pthread_exit返回或从线程函数返回。)

线程上下文还可以指示线程的状态(尚未创建,正在运行,已停止)。

在准备终止状态并指示它正在终止之后,可能有一个同步原语,例如线程可以kick的条件变量或信号量。

pthread_join函数可以等待该同步原语。 一旦等待完成,该函数可以触发资源清理该线程,除了拉出状态。

线程在发送加入信号后继续执行。 要做到这一点,它必须继续有一个堆栈上下文。 在那之后,系统必须解决后台干净地停止线程的问题。

线程的用户空间实现可以推迟到内核。 例如,一些信号可以熄灭,或者表示线程已经完成。 在这一点上,用户空间知道该线程不可能再使用它的堆栈,并且可以回收它。

在内核中,调度程序可以“吃”一个线程。 线程可以调用调度程序中的一些函数,在清除大部分资源后永远不会返回。 它将线程标记为死亡,并将上下文切换到另一个线程。 线程的堆栈将永远不会再被使用(因为该函数永远不会返回),并且可以回收它的任务结构以及任何附加的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐