相同点
- 对于线程来说,信号量跟互斥锁是非常重要的概念,可以避免死锁或者读脏数据,然而两者区别也需要我们注意。
不同点
- 互斥锁(Mutex)保证了使用资源线程的唯一性和排他性,但是无法限制资源释放后其他线程申请的顺序问题,所以是无序的。
- 而信号量(Semaphore)一般就是互斥的(少许情况读取是可以同时申请的),其保证了线程执行的有序性,可以理解为从一到多的进步,比如缓存区问题,可以有多个缓存区存在的情况。互斥锁(Mutual exclusion,缩写 Mutex)是semaphore的一种特殊情况(Semaphore=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
- 互斥锁必须由同一线程进行加锁和解锁;信号量是由单个线程释放,另一个线程获取,保证线程同步。
用法
- 综上所述:锁是服务于共享资源的;而semaphore是服务于多个线程间的执行的逻辑顺序的(典型例子:同步问题)。