w*s 发帖数: 7227 | 1 据说mutex, semphore的情况是不同的,你们怎么看? |
w*s 发帖数: 7227 | 2 尼玛,每次都这样,不上美女图就没人回,好了好了,来了,你们没治了。
【在 w*s 的大作中提到】 : 据说mutex, semphore的情况是不同的,你们怎么看?
|
g*********e 发帖数: 14401 | 3 建议你找本书好好看看啥叫mutex semaphore |
W***o 发帖数: 6519 | 4 我是这么理解的,用一个通俗的“排队上厕所大便"的例子来说一下我的体会:
1. Mutex:
一queue人排队等着去厕所大便,但是只有一个厕所,所以只能FIFO,一个人拿到钥匙
以后,如厕,锁门;这个时候后面所有的人都不能进去,必须要等前面的那个人大便完
开门以后,拿到钥匙才能进去如厕,锁门....
2. Semaphore:
还是一queue人排队等着去厕所大便,这个时候有3个厕所(不分男女假设),都需要钥
匙进去;钥匙都一样,这个需要有人告诉大家有几把钥匙available, 如果是0,那大家
耐心等。如果有1个钥匙,前面的一个人进去大便,如果有3把钥匙,一次放前面三个人
去厕所。
我只写过mutex, 但是看过semaphore 的实现代码,觉得差不多就是这意思,
连续两次RELEASE, mutex 可能就交换好两次钥匙了
semaphore 肯定就是放两个人进去大便了
请大牛赐教
【在 w*s 的大作中提到】 : 据说mutex, semphore的情况是不同的,你们怎么看?
|
w*s 发帖数: 7227 | 5 尼玛老子完全记错了semphore
【在 W***o 的大作中提到】 : 我是这么理解的,用一个通俗的“排队上厕所大便"的例子来说一下我的体会: : 1. Mutex: : 一queue人排队等着去厕所大便,但是只有一个厕所,所以只能FIFO,一个人拿到钥匙 : 以后,如厕,锁门;这个时候后面所有的人都不能进去,必须要等前面的那个人大便完 : 开门以后,拿到钥匙才能进去如厕,锁门.... : 2. Semaphore: : 还是一queue人排队等着去厕所大便,这个时候有3个厕所(不分男女假设),都需要钥 : 匙进去;钥匙都一样,这个需要有人告诉大家有几把钥匙available, 如果是0,那大家 : 耐心等。如果有1个钥匙,前面的一个人进去大便,如果有3把钥匙,一次放前面三个人 : 去厕所。
|
g*****n 发帖数: 420 | 6 跟库有关,有些库会死锁,有些不会.我记不太清楚了,好像boost release ,acquire次数
不一样会死锁. |
x****o 发帖数: 21566 | 7 1) semaphore has two types: counting semaphore and binary semaphore
2) mutex is similar to binary semaphore but with one biggest difference
"the principle of ownership"
Mutex requires ownership, semaphore does not.
That's it. |
s********k 发帖数: 6180 | 8 最重要有一个区别,mutex只能锁住的thread释放,semaphore没有这个限制,thread
1signal,thread 2 wait完全可以
【在 W***o 的大作中提到】 : 我是这么理解的,用一个通俗的“排队上厕所大便"的例子来说一下我的体会: : 1. Mutex: : 一queue人排队等着去厕所大便,但是只有一个厕所,所以只能FIFO,一个人拿到钥匙 : 以后,如厕,锁门;这个时候后面所有的人都不能进去,必须要等前面的那个人大便完 : 开门以后,拿到钥匙才能进去如厕,锁门.... : 2. Semaphore: : 还是一queue人排队等着去厕所大便,这个时候有3个厕所(不分男女假设),都需要钥 : 匙进去;钥匙都一样,这个需要有人告诉大家有几把钥匙available, 如果是0,那大家 : 耐心等。如果有1个钥匙,前面的一个人进去大便,如果有3把钥匙,一次放前面三个人 : 去厕所。
|
W***o 发帖数: 6519 | 9 我记得用mutex也能让其他thread 等的,比如这个: pthread_cond_wait()
【在 s********k 的大作中提到】 : 最重要有一个区别,mutex只能锁住的thread释放,semaphore没有这个限制,thread : 1signal,thread 2 wait完全可以
|
s**********k 发帖数: 88 | 10 这是condition不是mutex
每个condition需要一个mutex保护,这个用来保护的mutex也是遵从同一个thread开关
的。
【在 W***o 的大作中提到】 : 我记得用mutex也能让其他thread 等的,比如这个: pthread_cond_wait()
|
H****S 发帖数: 1359 | 11 Semaphore是non-reentrant的,参考以下代码:
def foo() {
println("smile")
super.foo()
}
一个binary semaphoreh会出现死锁。
【在 w*s 的大作中提到】 : 据说mutex, semphore的情况是不同的,你们怎么看?
|