线程1

1.线程的概念:
线程是轻量级的进程,是进程内部的一条执行序列(一组有序指令),或者说是执行流,一个进程至少有一条线程,即就是main函数所代表的执行序列称之为主线程,通过线程库可以创建线程。
2.线程与进程的区别:
(1)进程是资源分配的单位,线程是CPU调度执行的单位。
(2)多进程,进程间资源都是独立的,同一进程内的线程是资源共享的。
(3)线程更加轻便,更小巧,线程创建调度,切换效率高。
3.linux系统中线程库的使用:

#include<pthread.h>

创建线程:

 int pthread_create(pthread_t *id,pthread_attr_t *attr,void* (*pthread_fun)(void *),void *arg);

id:线程ID,线程创建时分配的线程ID,传递一个变量的地址;
attr:线程属性,默认为NULL;
pthread_fun:线程函数,新创建的线程的执行体,函数地址,指定新线程开始的地方。
返回值:成功返回0,失败返回错误码。
同一进程中的线程都是并发执行的,并且线程的执行顺序是不一定的,由系统决定。
轻量级主要体现在:
(1)资源:创建(2)调度:快
线程必须依赖于进程,进程结束,所以线程随之结束。
4.创建时给函数线程传参的两种方式:
(1)值传递–最多传递四个字节的数据,指针。将传递的值直接强转为 void 星,arg:类型时void星,记录的时传递的值。
(2)地址传递:将传递的值的地址转化为void 星,arg:类型是void 星,记录的是传递的地址。
结束线程:

void pthread_exit(void *reval);

等线程结束,获取线程退出信息:

int pthread_join(pthread_t id,void **retval);

取消一个线程:只是发出取消请求,并不会阻塞。

int pthread_cancel(pthread_t id);

主线程后期对值的修改可能影响函数进程中获取值,函数进程中通过地址对变量修改,也会影响主线程中变量的值。
线程的实现方式:用户级、内核级、混合级
(1)用户级线程:内核并不支持多线程,多线程是用户态实现,用户代码就必须实现线程的创建、调度、销毁等工作。
//内核只能识别出是一个进程
优点:内核简单、线程切换速度快、每次切换不用陷入内核。
缺点:用户代码复杂、如果一条线程阻塞,则整个进程阻塞。
(2)内核级线程:linux
进程中的数据区域、堆区,多线程都是共享的,创建线程只会在进程的资源中申请栈区资源,用于线程函数的执行。
5.多线程的数据共享
(1)全局 共享 同一进程中的多个线程共享进程的4G虚拟空间
(2)栈区 不共享
(3)堆区 共享
(4)文件描述符 共享
怎样使得数据共享:
(1)将数据定义到全局。
(2)将数据保存到堆区。
(3)创建线程时,将栈区数据地址传给线程函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值