同步与锁
Posted luckysimple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步与锁相关的知识,希望对你有一定的参考价值。
为了避免多个线程同时访问同一个数据而产生不可预料的结果,需要将各个线程对同一数据的访问同步。同步最常见的方法就是用锁。
接下来介绍常用的锁。
二元信号量(Binary Semaphore)
Binary Semaphore是最简单的一种锁,只有两种状态:占用与非占用。适合只能被唯一一个线程独占访问的资源。
多元信号量(简称Semaphore )
Semaphore允许多个线程并发访问资源。初始值为N的信号量允许N个线程并发访问资源。线程访问资源时,将信号量减1;访问完资源后,将信号量加1。当信号量的值为0时,线程进入等待状态。
互斥量(Mutex)
Mutex类似Binary Semaphore。他们的不同在于:
- 信号量可以被系统的任意线程获取和释放。即同一信号量被一个线程获取之后,可由另一个线程释放;
- 互斥量要求线程谁获取谁释放。
临界区(Critical Section)
Critical Section是比Mutex更严格的同步方法。
Critical Section和Mutex与Semaphore的区别:
- Mutex与Semaphore在系统的任何进程都是可见的。即一个进程创建了Mutex或Semaphore,另一个进程获取该锁是合法的;
- Critical Section的作用范围仅限于本进程,其他进程无法获取该锁。
读写锁(Read-Write Lock)
Read-Write Lock适合读取频繁,偶尔写入的情况。Read-Write Lock有两种获取方式,共享或独占。
条件变量(Condition Variable)
Condition Variable类似一个栅栏。条件变量可以让许多线程一起等待某个事件的发生,当事件发生时(条件变量被唤醒),所有线程都一起恢复运行。
以上是关于同步与锁的主要内容,如果未能解决你的问题,请参考以下文章