原理
自旋锁是什么?
互斥锁当想加锁但是锁已经被别的线程占有时,线程会阻塞
自旋锁当想加锁但是锁已经被别的线程占有时,线程会轮询等待
自旋锁用在哪?
自旋锁主要适用于线程占有锁得时间短的场景,
如果用互斥锁要经历从阻塞到唤醒的过程,
相对于自旋锁线程一直处理就绪状态轮询等待
耗费的时间更多
但是如果线程占有锁的时间很长
则其他等待持有自旋锁线程就会处于长时间的轮询忙等
所以适用于线程占有锁的时间较短的场景
自旋锁怎么实现?
最简单的想法 可以定义一个flag,然后用while循环判断 flag是否为true
如果为true表示可以锁被别的线程占有则循环等待
等到它为false的时候跳出循环 表示占有到锁了
然后该线程将flag设定为true 这样别的线程想要申请时就会循环等待
然后开始事务处理
处理完了以后将flag设定为false表示释放锁
while(flag == true);
flag = true<