【linux系列知识】线程

线程

目录

线程

1、简单介绍

2、线程同步

加锁

条件变量(生产者消费者模型)

信号量(加强版的互斥量)

1、简单介绍

       轻量级的进程,通信简单,有效利用CPU;明确的执行目的,一个进程内部可以有多个线程,默认一个线程。真正干活的是线程。线程互相独立,所以通信繁琐。

       根据是否共享判断是进程或线程。进程是系统最小的分配资源单位,线程是最小的执行单位。

       线程也有PCB,所以如果一个进程有多个线程,则有多个PCB。

       调试麻烦,error变量不共享。

优点:

  • 提高并发性
  • 占用资源小
  • 方便通信

缺点:

  • 调试麻烦
  • 库函数,不稳定
  • 对信号支持不好

2、线程同步

      数据混乱原因:(1)资源共享(2)随机调度(3)缺乏必要的同步机制

资源共享:在主进程创建线程,同时主进程就是主线程,子线程和主线程同时运行的意思就是资源共享。

解决办法:

  • 加锁    (文件锁只能启动一个进程)
  • 条件变量
  • 信号量 

加锁

互斥锁:创建——初始化——加锁——解锁——销毁锁

死锁:(1)锁了又锁,第二个永久阻塞

           (2)交叉锁,两把锁,两个线程互抢一个,都在抢对方的锁。解决办法:申请锁顺序一致,如果申请到一把锁,申请另外一把的时候申请失败,应该释放已申请的锁。 

读写锁

  • 特点:读共享,写独占,写优先级高。
  • 读写锁仍然是一把锁,有不同的状态:未加锁、读锁、写锁
  • 使用场景:适合读线程较多的

条件变量(生产者消费者模型)

作用:避免无必要的竞争,可以引起阻塞,并非加锁,线程阻塞在条件变量处。

【linux系列知识】线程

信号量(加强版的互斥量)

可有多个锁,允许多个进程访问共享资源。

【linux系列知识】线程