Linux程序设计——线程

线程是进程内部的某一个控制序列,可理解为:线程是运行在进程上下文中的逻辑流。

线程由内核自动调度,有自己的线程上下文,上下文中记录了线程正常运行所需要的状态和信息,比如:线程ID,栈指针,程序计数器,通用目的寄存器等。

多个线程可在同一个进程的上下文中运行,因此,它们可共享该进程虚拟地址空间中的所有内容,比如:代码、数据、堆、共享库和打开的文件。

进程和线程之间的区别:

执行fork调用创建进程时,将创建出父进程的一份新副本。但是,新的进程拥有自己的 PID 和堆栈空间,页表等,不会与父进程共享信息,同时,在执行上几乎完全独立于父进程。

创建线程时,新的线程将拥有自己的栈,但是会和父线程共享全局变量、文件描述符等信息,执行上也依赖于父线程的状态。

线程执行模型
线程的执行不同于进程,它并不按照严格的父子层次来组织。与进程相关的所有线程被组织在同一个线程池中,而线程池的主要影响是:一个线程可以杀死它的任何对等线程,或者等待它的任意对等线程终止。另外,每个对等线程都能读写相同的共享数据。

并发线程执行图:
这里写图片描述

线程接口的声明

#include<pthread.h>
typedef void *(func)(void *);
int pthread_create(pthread_t *thread,pthread_attr_t *attr, func *f,void *arg)

创建线程:
*thread,被写入一个标识符,创建成功后,便可使用该标识符来引用新线程。
*attr,用来改变新线程的属性。
*f,新线程将要执行的函数的入口地址。
*arg,用来做线程执行的函数的参数变量。

#include<pthread.h>
pthread_t pthread_self(void);

获取当前线程 id。

#include<pthread.h>
void pthread_exit(void *thread_return);

终止线程:
调用pthread_exit函数,显示终止。

#include<pthread.h>
Int pthread_cancle(pthread_t tid); 

线程通过以对等线程的ID,调用 pthread_cancle 接口终止对等线程。

除了上述两种方式外,当顶层的线程例程返回时,当前线程则会隐式终止;

#include<pthread.h>
Int pthread_join(pthread_t tid,void **thread_return);

回收已终止线程的资源,pthread_join 函数会阻塞当前线程,直到编号为 tid 的线程终止,同时回收已终止线程占用的资源后,才会再次调度当前线程。

以上就是线程的简单介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值