Linux线程

概念

  • 书面 通常线程指的是共享相同地址空间的多个任务
  • 人话 带有时间片的函数

特点

使用多线程的好处

  • 大大提高了任务切换效率
  • 避免了额外的TLB&cache的刷新

线程共享的资源

  • 可执行指令
  • 静态数据
  • 进程中打开的文件描述符
  • 当前的工作目录
  • 用户ID
  • 用户组ID

线程独占的资源

  • 线程ID
  • PC(程序计数器)和相关寄存器
  • 堆栈
  • 错误号(errno)
  • 优先级
  • 执行状态和属性

linux线程库

  1. 安装及更新

    • sudo apt-get install manpages-posix-dev manpages-posix
  2. pthread线程库提供了如下基本条件

    • 创建线程
    • 回收线程
    • 结束线程
  3. 同步和互斥机制

    • 信号量
    • 互斥锁
    • 条件变量

基本函数

创建线程 pthread_create
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*routine)(void *),void *arg);
//返回值:
成功返回0,失败返回错误码
//参数:
thread  线程对象
attr    线程属性,NULL代表默认属性
routine 线程执行的函数
arg     传递给routine的参数
回收线程 pthread_join
int pthread_join(pthread_t threa,void **retval);
//功能
调用线程阻塞直到thread结束
//返回值
成功返回0,失败时返回错误码
//参数
*retval接收线程thread的返回值
thread要收回的线程对象
结束线程 pthread_exit
void pthread_exit(void *retval);
//功能
结束当前线程,线程私有资源被释放
//参数
retval不能是局部变量
retval可被其他线程通过pthread_join获取

同步和互斥

同步机制

  • 同步(synchronization)指的是多个任务按照约定的先后次序相互配合完成一件事情
  • 由信号量来决定线程是继续运行还是阻塞等待

互斥机制

  • 临界资源 一次只允许一个任务(进程、线程)访问资源
  • 临界区 访问临界资源的代码
    pthread_mutex互斥锁,就是互斥机制

线程实现同步互斥的方法

线程互斥锁
  1. 锁属于互斥机制
  2. 基本函数
    • 初始化锁 pthread_mutex_init();
    • 互斥锁上锁 pthread_mutex_lock();
    • 判断互斥锁上锁 pthread_mutex_trylock();
    • 互斥锁解锁 pthread_mutex_unlock();
    • 消除互斥锁 pthread_mutex_destroy();
条件变量
  1. 属于同步机制

  2. 基本函数

    • 初始化 pthread_cond_init();
      • pthread_cond_init(条件变量ID,属性);
    • 等待资源 pthread_cond_wait();
      • pthread_cond_wait(条件变量ID,锁的ID);
      • 必须搭配锁来使用
    • 告知资源到达 pthread_cond_signal();
  3. 等待操作包含的几个步骤

    1. 解锁
    2. 进入等待状态
    3. 资源到达
    4. 加锁
信号量
  1. 概念

    • 信号量代表某一类资源,其值表示系统中该资源的数量
    • 信号量是一个受保护的变量
      • 初始化
      • P操作(申请资源)
      • V操作(释放资源)
  2. Posix信号量

    • 无名信号量(基于内存的信号量)
  3. P/V操作

    • P(S)含义如下
      • 如果信号量的值大于0,线程获得资源(信号量-1)且线程继续运行不会阻塞
      • 如果信号量等于0,线程无法获得资源且阻塞在那里
    • V(S)含义如下
      • 线程释放资源(信号量+1)
      • 如果有任务等待资源,则唤醒等待任务,让其继续运行。

进程和线程的不同点

\进程线程
地址空间独占共享
通信7中(Unix早期通信3种、System V 3种、套接字)信号量、互斥锁、条件变量
调度和切换系统开销大,切换较慢系统开销小,切换迅速
依赖性相互独立依赖于进程
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值