作者:shurui26jx_882 | 来源:互联网 | 2023-09-10 17:11
以下状态对于每个线程是唯一的。
■ 线程ID
■ 寄存器状态(包括PC和栈指针)
■ 栈
■ 信号掩码
■ 优先级
■ 线程专用存储
线程调度
POSIX标准指定了三种调度策略:
先入先出策略(SCHED_FIFO)
循环策略(SCHED_RR)
自定义策略(SCHED_OTHER)。
SCHED_FIFO是基于队列的调度程序,对于每个优先级都会使用不同的队列。SCHED_RR与FIFO相似,不同的是前者的每个线程都有一个执行时间配额。SCHED_FIFO和SCHED_RR是对POSIX Realtime的扩展。SCHED_OTHER是缺省的调度策略。
线程调度提供了两个调度范围:进程范围(PTHREAD_SCOPE_PROCESS)和系统范围(PTHREAD_SCOPE_SYSTEM)。具有不同范围状态的线程可以在同一个系统甚至同一个程中共存。进程范围只允许这种线程与同一进程中的其他线程争用资源,而系统范围则允许此类线程与系统内的其他所有线程争用资源。实际上,从Solaris 9发行版开始,系统就不再区分这两个范围。
线程取消
一个线程可以请求终止同一个进程中的其他任何线程。目标线程(要取消的线程)可以延后取消请求,并在该线程处理取消请求时执行特定于应用程序的清理操作。通过pthread取消功能,可以对线程进行异步终止或延迟终止。异步取消可以随时发生,而延迟取消只能发生在所定义的点。延迟取消是缺省类型。
线程同步
使用同步功能,可以控制程序流并访问共享数据,从而并发执行多个线程。
共有四种同步模型:互斥锁、读写锁、条件变量和信号。
■ 互斥锁仅允许每次使用一个线程来执行特定的部分代码或者访问特定数据。
■ 读写锁允许对受保护的共享资源进行并发读取和独占写入。要修改资源,线程必须首先
获取互斥写锁。只有释放所有的读锁之后,才允许使用互斥写锁。
■ 条件变量会一直阻塞线程,直到特定的条件为真。
■ 计数信号量通常用来协调对资源的访问。使用计数,可以限制访问某个信号的线程数
量。达到指定的计数时,信号将阻塞。
<未完待续--持续更新>
POSIX标准指定了三种调度策略:
先入先出策略(SCHED_FIFO)
循环策略(SCHED_RR)
自定义策略(SCHED_OTHER)。
SCHED_FIFO是基于队列的调度程序,对于每个优先级都会使用不同的队列。SCHED_RR与FIFO相&#20284;,不同的是前者的每个线程都有一个执行时间配额。SCHED_FIFO和SCHED_RR是对POSIX Realtime的扩展。SCHED_OTHER是缺省的调度策略。
Linux多线程编程--学习笔记,布布扣,bubuko.com