semaphore与Mutex
2013-07-19 11:28
274 查看
C# Semaphore Class
http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
wiki
Semaphore (programming)
http://en.wikipedia.org/wiki/Semaphore_%28programming%29
理解Semaphore和Mutex
Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。
Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。
Binary semaphore与Mutex的差异:
在有的系统中Binary semaphore与Mutex是没有差异的。在有的系统上,主要的差异是mutex一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量,大家可以加或减),因此semaphore可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex能否由其他进程释放则未定,因此建议mutex只用于保护critical section。而semaphore则用于保护某变量,或者同步。
另一个概念是spin lock,这是一个内核态概念。spin lock与semaphore的主要区别是spin lock是busy waiting,而semaphore是sleep。对于可以sleep的进程来说,busy waiting当然没有意义。对于单CPU的系统,busy waiting当然更没意义(没有CPU可以释放锁)。因此,只有多CPU的内核态非进程空间,才会用到spin lock。Linux kernel的spin lock在非SMP的情况下,只是关irq,没有别的操作,用于确保该段程序的运行不会被打断。其实也就是类似mutex的作用,串行化对
critical section的访问。但是mutex不能保护中断的打断,也不能在中断处理程序中被调用。而spin lock也一般没有必要用于可以sleep的进程空间。
用semaphore实现mutex
以及 用mutex 实现semaphore
http://bbs.chinaunix.net/viewthread.php?tid=963707
原文见:/article/4810996.html
http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
wiki
Semaphore (programming)
http://en.wikipedia.org/wiki/Semaphore_%28programming%29
理解Semaphore和Mutex
Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。
Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。
Binary semaphore与Mutex的差异:
在有的系统中Binary semaphore与Mutex是没有差异的。在有的系统上,主要的差异是mutex一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量,大家可以加或减),因此semaphore可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex能否由其他进程释放则未定,因此建议mutex只用于保护critical section。而semaphore则用于保护某变量,或者同步。
另一个概念是spin lock,这是一个内核态概念。spin lock与semaphore的主要区别是spin lock是busy waiting,而semaphore是sleep。对于可以sleep的进程来说,busy waiting当然没有意义。对于单CPU的系统,busy waiting当然更没意义(没有CPU可以释放锁)。因此,只有多CPU的内核态非进程空间,才会用到spin lock。Linux kernel的spin lock在非SMP的情况下,只是关irq,没有别的操作,用于确保该段程序的运行不会被打断。其实也就是类似mutex的作用,串行化对
critical section的访问。但是mutex不能保护中断的打断,也不能在中断处理程序中被调用。而spin lock也一般没有必要用于可以sleep的进程空间。
用semaphore实现mutex
以及 用mutex 实现semaphore
http://bbs.chinaunix.net/viewthread.php?tid=963707
原文见:/article/4810996.html
相关文章推荐
- 多线程基础之二:mutex和semaphore使用方法
- 多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
- 关于用信号量Semaphore实现互斥锁Mutex
- semaphore与Mutex
- spinlock,mutex,semaphore,vitical section的作用与区别
- linux spinlock mutex semaphore
- spinlock,mutex,semaphore,critical section的作用与区别
- 内核必看: spinlock、 mutex 以及 semaphore
- 互斥锁Mutex与信号量Semaphore的区别
- 多线程基础之三:使用event, mutex, semaphore实现多进程间互斥
- 分布式锁-zookeeper-SharedLock基于InterProcessSemaphoreMutex(二)分布式共享锁
- Semaphore 和 Mutex 的区别 [No. 32]
- mutex,semaphore,critical section 简介及使用
- 多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
- 线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁
- 【进展】2015.08.04 增加 SEMAPHORE 释放功能,增加MUTEX权限判断,非Onwer任务不能解锁
- 进程/线程同步——Critical Section,Mutex,Semaphore,Event区别
- Mutex vs. Semaphore, what is the difference?
- [Linux driver] Mutex, semaphore, spinlock的深度解析
- mutex, spinlock, semaphore