|
|
1
3
是的,这是一般的想法。有关特定实现的详细信息,请查看 glibc . |
|
|
2
4
pthread_join可能在内部实现为等待信号量,该信号量在线程退出时触发,在调用pthread_exit或其主函数退出时触发。 在任何情况下,glibc的源代码都是可用的,请尝试谷歌代码搜索(我在那里看到了一些有用的东西)。 |
|
|
3
1
一个线程通常有一个与之相关联的小结构,即线程上下文。这个结构可以填充所有使线程“工作”所需的数据块。 例如,数据结构的根需要访问该线程的特定于线程的键,并在关闭时迭代这些键以清除它们。 在这个结构中通常有一个类似互斥锁的锁,并且可能不止一个锁用于不同的部分。
线程上下文中可以有一个小字段,终止线程可以在其中放置其退出状态。(The
线程上下文还可以指示线程的状态(尚未创建、运行、停止)。
可能存在同步原语,例如条件变量或信号量,线程可以
这个
线程在发出联接信号后继续执行。要做到这一点,它必须继续具有一个带有堆栈的上下文。之后,系统必须解决在后台干净地停止线程的问题。 线程的用户空间实现可以推迟到内核。例如,某些信号可能会消失,或者任何表示线程已完成的信号。此时,用户空间知道线程不可能再使用它的堆栈,并且可以循环使用它。 在内核中,调度器可以“吃掉”一个线程。线程可以调用调度程序中的某个函数,该函数在清理完其大部分资源后永远不会返回。它将线程标记为死线程,并将上下文切换到另一个线程。线程的堆栈将不再被使用(因为该函数永远不会返回),并且可以被回收,以及它的任务结构和附加到它的任何剩余内容。 |
|
|
atlue42 · 为SPN制作进程调度模拟器(下一个进程最短) 3 年前 |
|
|
jack brown · 如何在失败时获得并行工作 4 年前 |
|
|
prmph · javascript上抢占式后台工作调度的通用解决方案 8 年前 |
|
|
Terry Pang · 当涉及多个通道时,select如何工作? 8 年前 |
|
|
martine · 索引器:索引2超出大小为2的轴0的界限(列表调度) 9 年前 |
|
|
user2887596 · scala中长时间间隔的任务调度 9 年前 |
|
|
Kevin SUN · 具有实时任务的多核Linux软锁定 10 年前 |
|
|
Mounhim · Quartz.net的日常工作每分钟都在执行 12 年前 |