线程
线程是操作系统能够调度和执行的基本单位,在 Linux 中也被称之为轻量级进程(LWP:light weight process),在 Linux 系统中,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源比如 cpu、内存、文件,将线程分配到某个 cpu 上执行
一个进程可以拥有多个线程,它还可以同时使用多个cpu 来执行各个线程,以达到最大程度的并行,提高工作的效率。 线程的本质是一个进程内部的一个控制序列,它是进程里面的东西,一个进程可以拥有一个进程或者多个进程
总结: 1.一个程序至少有一个进程, 一个进程至少有一个线程。
2.线程使用的资源是进程的资源,进程崩溃线程也随之崩溃。
3.线程的上下文切换,要比进程更加快速,因为本质上,线程很多资源都是共享进程的,所以切换时,需要保存和切换的项是很少的
4.进程(process)和线程(thread):进程是资源管理的最小单位,线程是程序执行的最小单位
创建线程
pthread_create函数 作用:创建一个线程 创建线程实际上就是确定调用该线程函数的入口点,在线程创建后,就开始运行相关的线程函数
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
thread:指向线程标识符的指针
attr:设置线程属性
start_routine: start_routine 是一个函数指针,指向要运行的线程入口,
即线程运行时要执行的函数代码。
arg:运行线程时传入的参数
线程属性 在 Linux 中线程属性结构:
typedef struct
{
int etachstate;
int schedpolicy;
structsched_param schedparam;
int inheritsched;
int scope;
size_t guardsize;
int stackaddr_set;
void* stackaddr;
size_t stacksize;
}pthread_attr_t;
线程的属性非常多,而且其属性值不能直接设置,须使用相关函数进行操作,线程属性主要包括如下属性:作用域(scope)、栈大小(stacksize)、栈地址(stackaddress)、优先级(priority)、分离 的状态(detachedstate)、调度策略和参数(scheduling policy and parameters)。默认的属性为非绑定、非分离、 1M 的堆栈大小、与父进程同样级别的优先级
pthread api
|