一个程序,它创建两个线程,每个线程都做了一些独立的工作,在这例子中,打印“A”或“B”。
❯ ./t0
main: begin
A
B
main: end
创建线程:成功返回零,否则返回非零值
#include <pthread.h>
int pthread_create( pthread_t * thread,
const pthread_attr_t * attr,
void * (*start_routine)(void*),
void * arg);
typedef struct
{
int detachstate; // 线程的分离状态
int schedpolicy; // 线程调度策略
structsched_param schedparam; // 线程的调度参数
int inheritsched; // 线程的继承性
int scope; // 线程的作用域
size_t guardsize; // 线程栈末尾的警戒缓冲区大小
int stackaddr_set; // 线程的栈设置
void* stackaddr; // 线程栈的位置
size_t stacksize; // 线程栈的大小
} pthread_attr_t;
等待线程:一直阻塞调用它的线程,直至目标线程执行结束
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
进程的资源分配角色:进程由一组相关资源构成,包括地址空间(代码段、数据段)、打开的文件等各种资源
线程的处理机调度角色:线程描述在进程资源环境中的指令流执行状态
不同操作系统对线程的支持
进程和线程的关系
线程是一个调度实体 Scheduling Entry
User-SE v.s. Kernel-SE
线程与进程的比较
轻量级进程(Light-Weight Process,LWP)是内核支持的用户线程,一个进程可有一个或多个 LWP,每个 LWP 是跟内核线程一对一映射的,也就是 LWP 都是由一个内核线程支持。 在 LWP 之上也是可以使用用户线程的,那么 LWP 与用户线程的对应关系就有三种:
线程是调度的基本单位,而进程则是资源拥有的基本单位。
操作系统的任务调度,实际上的调度对象是线程,而进程只是给线程提供了虚拟内存、全局变量等资源。