信号量一般有两种运用,一是所谓的binary semaphore,它的值只有0或者1,从技术角度看它可以产生类似于互斥的功能,但是它们有区别:
- 信号量的释放不一定是已经获取信号量的线程,但是互斥的释放一定要是已经获取互斥的线程。
- 信号量的初始值可以是0,其他线程可以通过post或者up之类的函数增加这个值,但是互斥的初始化值一定是一个有效的值。
- 信号量一般情况下无法实现递归获取和释放,但是互斥一般有递归获取和释放。
那么我们在什么情况下使用信号量或者是互斥呢?我的个人意见是对于多进程之间资源的保护,信号量的使用一般比较方便,因为如果使用互斥的话,在按照posix1标准实现的系统中,我们往往要把互斥存放在共享内存中,以便进程之间能够相互访问。如果我们运用的系统是多线程,那么互斥的使用可能更加的容易,并且相对容易调试,因为互斥的释放只能是在获取线程中,减少了线程之间的太多关联。
上面仅仅是我个人对信号量和互斥的一个理解,里面不免会搀杂着很多的个人观点,或许还是不正确的,请网友指正!谢谢!