一:自旋锁用在多个cpu系统中。当一个线程在一个cpu上正在使用资源,另一个线程在另一个cpu上正忙等待
这个资源的时候,就会用到自旋锁来保护临界资源。在单处理器系统中,自旋锁函数为空。
二:自旋锁基于共享变量(如ststic变量)。函数通过给变量设置一个值来获得锁,其它需要锁的函数会查询它,
并知道锁现在不可用,然后再一个忙等待的循环中“自旋”,直到锁可用为止。
由于使用自旋锁时,其它cpu被强制等待。因此自旋锁不能够用于花费过长的函数中。
进程间对共享资源的互斥访问时通过信号量机制来实现的。Lnux 中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。