[System]几种同步方式

1. 信号量 - Semaphore
  首先初始化信号量的值为N
  线程访问资源时,首先获取信号量:
    将信号量的值减1
    如果信号量的值小于0,则进入等待状态,否则继续运行。
  访问完资源后,线程释放信号量:
    将信号量的值加1
    如果信号值的值小于1,唤醒一个等待的线程。

2. 互斥量 - Mutex
  资源仅同时允许一个线程访问。
  与信号量不同的是,信号量可以被任意线程获取与释放。即一个线程获取了信号量后,可由另一个线程释放。而互斥量要求哪个线程获取了互斥量,哪个线程就要负责释放这个锁。

3. 临界区 - Critical Section
  与信号量、互斥量不同的是,信号量和互斥量是跨进程的,即一个进程创建了信号量或互斥量,其它进程都可以合法访问该锁。而临界区的作用范围仅限于本进程。
  除此之外,临界区与互斥量有相同的性质。

4. 读写锁 - Read-Write Lock
  应用于读写的场合。即多线程可同时读取资源,但当有线程要修改资源时,需要进行同步。
  获取锁时,有两种方式:共享的(Shared)或独占的(Exclusive),获取的行为可总结为下表所示:

读写锁状态 以共享方式获取 以独占方式获取
自由 成功 成功
共享 成功 失败
独占 失败 失败

 

5. 条件变量
  线程可以等待条件变量,一个变量可以被多个线程等待。
  线程可以唤醒条件变量,此时某个或所有等待此变量的线程都会被唤醒并继续运行。

posted @ 2012-04-15 16:41  linear  阅读(308)  评论(0编辑  收藏  举报