自旋锁
除了前面提到过的互斥锁和读写锁外,还有另外一种锁:自旋锁(spinlock)。自旋锁的原理比较简单,就是当某个资源不可用时不断查询,直到资源可用:
void tese_and_set(bool* condition)
{
bool tmp = *condition;
*condition = true;
return tmp;
}
void func()
{
while (test_and_set(&condition));
/* visit */
condition = false;
}
其中的操作 test_and_set() 可以看成一个原子操作,通常由硬件来实现。如果 condition 为 false,while 循环会不断地查询 condition 的状态,直到其可用为止。因为在条件不满足时程序也一直在忙,这样会消耗 cpu 资源,所以自旋锁适合用在执行时间不长的临界区中,例如修改一个数值等。
由于自旋锁比较简单,pthread … 阅读全文…