互斥信号量(1) 多个线程使用同一内存块保存共享的数据 要防止多个线程同时存取同一个数据 经常使用得技术:互斥信号量
互斥信号量(1) 多个线程使用同一内存块保存共享的数据 要防止多个线程同时存取同一个数据 经常使用得技术:互斥信号量
互斥信号量(2) 种小型信号量 信号量在两个状态之一:关锁和开锁 二元信号量(即只有0,1两个值的信号量) 两种操作被定义为互斥 互斥信号量的改变是一个原子动作 LOcK,试图锁住互斥信号量 如果互斥信号量处于开锁状态 LOcK将成功执行
互斥信号量(2) • 一种小型信号量 • 信号量在两个状态之一:关锁和开锁 • 二元信号量(即只有0, 1两个值的信号量) 两种操作被定义为互斥 互斥信号量的改变是一个原子动作 • LOCK,试图锁住互斥信号量 如果互斥信号量处于开锁状态 LOCK将成功执行
互斥信号量(3) 在多处理器系统中 多个线程运行在不同的cPU上 如果两个线程在同一个实例上 试图加锁同一个互斥信号量 只有一个线程能赢,别的将失败 如果线程试图加锁已被锁住的互斥信号量 它将被阻塞
互斥信号量(3) • 在多处理器系统中 多个线程运行在不同的CPU上 • 如果两个线程在同一个实例上 试图加锁同一个互斥信号量 只有一个线程能赢,别的将失败 • 如果线程试图加锁已被锁住的互斥信号量 它将被阻塞
互斥信号量(4) UNLOCK操作解锁一个互斥信号量 如果一个或多个线程在一个互斥信号量上等 待,只有一个线程解锁,其余的线程继续等 待
互斥信号量(4) • UNLOCK操作解锁一个互斥信号量 • 如果一个或多个线程在一个互斥信号量上等 待,只有一个线程解锁,其余的线程继续等 待
TRYLOCK操作 该操作试着加锁一个互斥信号量 如果该互斥信号量未被锁定 TRYLOCK返回状态码,说明操作成功 ·若该互斥信号量是锁着的 TRYLOCK并不阻塞该线程 而返回指示失败的状态码 容易实现
TRYLOCK操作 • 该操作试着加锁一个互斥信号量 • 如果该互斥信号量未被锁定 TRYLOCK返回状态码,说明操作成功 • 若该互斥信号量是锁着的 TRYLOCK并不阻塞该线程 而返回指示失败的状态码 • 容易实现