NSPR 提供了一个执行环境,该环境促进了轻量级线程的使用。每个线程都是一个执行实体,它独立于同一进程中的其他线程进行调度。本章介绍了基本的 NSPR 线程 API。
线程拥有的资源数量有限。这些资源包括堆栈和 CPU 寄存器(包括 PC)。对于 NSPR 客户端,线程由指向类型为 PRThread 的不透明结构的指针表示。线程由显式客户端请求创建,并且在从其根函数返回或进程异常终止之前一直保持有效的独立执行实体。线程是关键资源,因此需要一些管理。要同步线程的终止,您可以将其与另一个线程 **连接**(请参阅 PR_JoinThread)。连接线程提供了确凿的证据,证明目标线程已终止并已完成对线程可以访问的资源以及线程本身资源的操作。
有关 NSPR 线程模型的概述以及说明其用法的示例代码,请参阅 NSPR 简介。
有关与线程同步相关的 API 参考信息,请参阅 锁 和 条件变量。
线程类型和常量¶
线程函数¶
此处描述的大多数函数都接受指向线程的指针作为参数。NSPR 不会检查线程的有效性。调用者有责任确保线程有效。这些函数对无效线程的影响未定义。
创建、连接和识别线程¶
PR_CreateThread 创建一个新线程。
PR_JoinThread 阻塞调用线程,直到指定线程终止。
PR_GetCurrentThread 返回当前正在运行代码的当前线程对象。
PR_AttachThread` 将 PRThread 对象与现有本地线程关联。
PR_DetachThread` 将 PRThread 对象与本地线程分离。
控制线程优先级¶
有关 NSPR 控制线程优先级方式的概述,请参阅 设置线程优先级。
使用 PR_CreateThread 创建线程时,可以设置线程的 NSPR 优先级。创建线程后,您可以使用以下函数获取和设置其优先级
控制每个线程的私有数据¶
您可以使用这些函数将私有数据与进程中的每个线程关联
PR_NewThreadPrivateIndex 分配一个唯一的索引。如果调用成功,则同一进程中的每个线程都能够将私有数据与新索引关联。
PR_SetThreadPrivate 将私有线程数据与索引关联。
PR_GetThreadPrivate 检索与索引关联的数据。
中断和让步¶
PR_Interrupt 请求中断另一个线程。一旦目标线程收到请求通知,该请求将保留在该线程中,直到通知恰好传递一次或被清除。
PR_ClearInterrupt 清除先前的中断请求。
PR_Sleep 使线程让步给其他线程,持续指定的滴答数。
设置全局线程并发性¶
PR_SetConcurrency 设置 NSPR 用于创建本地线程的全局线程数。
获取线程的作用域¶
PR_GetThreadScope 获取当前线程的作用域。