y****1 发帖数: 58 | 1 spinlock 和 semaphore, mutex 的 区别????
可是感觉没有回答到点上。
spinlock: 1,hold lock 时间短,2,busy wait, 中断里用
semaphore 和 mutex: 1, hold lock 时间长, 2,block wait,中断里不可用
不知道还有其他吗??
谢谢!! |
m**********0 发帖数: 356 | 2 Here is what I found:
spinlock:
It is a big CPU sucker and its biggest risk is being interrupted by OS
scheduler while holding the lock.
One needs to be very careful during implementation to reduce unnecessary
busy waiting
In general, works only with hardware atomic support such as test-and-set
mutex: resource can be accessed only by 1 at a time
semaphore: # of accessors to the resource at a time depending on the
initialization of the semaphore. When it is initialized to 1, it has same
effect as using mutex.
【在 y****1 的大作中提到】 : spinlock 和 semaphore, mutex 的 区别???? : 可是感觉没有回答到点上。 : spinlock: 1,hold lock 时间短,2,busy wait, 中断里用 : semaphore 和 mutex: 1, hold lock 时间长, 2,block wait,中断里不可用 : 不知道还有其他吗?? : 谢谢!!
|
b***m 发帖数: 5987 | |
s********k 发帖数: 6180 | 4 spin lock和mutex相比,前者busy waiting,后者可能被context switch出去,跟hold
时间长短没关系,spin lock用得不好一样hold时间长,造成很大的性能损失。但是有
些时候你急需lock,比如很多系统里面的维护heartbeat什么,mutex不如spin lock快。
mutex和semaphore,很多人都会说一个是binary,一个可以是any number,但是这个其
实不是根本区别。mutex只能被获取它的process/thread释放,而semaphore可以被其他
的process/thread释放(经常在embedded里面比如某个timer interrupt建立或者释放
semaphore然后其余thread去access,用来保证某个时间段里面某种资源最多被调用多
少次)。所以mutex应该说是用在mutual exclusion,而semaphore多用在sync |
s*****s 发帖数: 157 | 5 另外, mutex 和 semaphore, 一个可以recursive, 一个不行 |
j*****I 发帖数: 2626 | 6 看了一下,好像spinlock和mutex的一个主要区别是后者是系统维护,前者是thread自
己check. short waiting的情况下,前者比较efficient.
mutex和semaphore的区别你研究的太深了吧。any number和binary一般足够了。说多了
反而容易露马脚吧。
hold
快。
【在 s********k 的大作中提到】 : spin lock和mutex相比,前者busy waiting,后者可能被context switch出去,跟hold : 时间长短没关系,spin lock用得不好一样hold时间长,造成很大的性能损失。但是有 : 些时候你急需lock,比如很多系统里面的维护heartbeat什么,mutex不如spin lock快。 : mutex和semaphore,很多人都会说一个是binary,一个可以是any number,但是这个其 : 实不是根本区别。mutex只能被获取它的process/thread释放,而semaphore可以被其他 : 的process/thread释放(经常在embedded里面比如某个timer interrupt建立或者释放 : semaphore然后其余thread去access,用来保证某个时间段里面某种资源最多被调用多 : 少次)。所以mutex应该说是用在mutual exclusion,而semaphore多用在sync
|
s********k 发帖数: 6180 | 7 更正一下,spin lock也可以被context switch出去,这样更危险,因为如果thread没
有释放spinlock就被INT了,其他的thread也拿不到这个资源。基本相当于系统锁死了。
【在 j*****I 的大作中提到】 : 看了一下,好像spinlock和mutex的一个主要区别是后者是系统维护,前者是thread自 : 己check. short waiting的情况下,前者比较efficient. : mutex和semaphore的区别你研究的太深了吧。any number和binary一般足够了。说多了 : 反而容易露马脚吧。 : : hold : 快。
|
B*******1 发帖数: 2454 | 8 弱问,spin lock就是在spin,还会被switch吗?
了。
【在 s********k 的大作中提到】 : 更正一下,spin lock也可以被context switch出去,这样更危险,因为如果thread没 : 有释放spinlock就被INT了,其他的thread也拿不到这个资源。基本相当于系统锁死了。
|
s********k 发帖数: 6180 | 9 比如好几个thread同时access某段代码做spinlock,某个thread拿到了之后,但是耗得
时间太多了,被kernel重新schedule INT了,就被context switch出去了,但是它的
spinlock还没有释放,其他同时access spinlock threads就会一直busy waiting,直
接拖死系统了。
【在 B*******1 的大作中提到】 : 弱问,spin lock就是在spin,还会被switch吗? : : 了。
|
Q*******e 发帖数: 939 | |
j*****I 发帖数: 2626 | 11 文档说spinlock适合那种short waiting.你说的这种情况应该是典型不符合。
【在 s********k 的大作中提到】 : 比如好几个thread同时access某段代码做spinlock,某个thread拿到了之后,但是耗得 : 时间太多了,被kernel重新schedule INT了,就被context switch出去了,但是它的 : spinlock还没有释放,其他同时access spinlock threads就会一直busy waiting,直 : 接拖死系统了。
|