自旋锁 · PHP/Python/前端/Linux 等等 学习笔记 · 看云
[TOC]
## 自旋锁
- 自旋锁也是一种多线程同步的变量
- 使用自旋锁的线程会反复检査锁变量是否可用
- 自旋锁不会让出CPU,是一种忙等待状态
- **死循环等待锁被释放**
**优点**
- 自旋锁避免了进程或线程上下文切换的开销
- 操作系统内部很多地方使用的是自旋锁
- 自旋锁**不适合在单核CPU**使用
API 是 `pthread_spinlock_t`
## 示例
<details>
<summary>main.cpp</summary>
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <vector>
pthread_spinlock_t spin_lock;
int num =0;
void *producer(void*){
int times = 10000000;
while(times--){
pthread_spin_lock(&spin_lock);
num++;
pthread_spin_unlock(&spin_lock);
}
}
void *comsumer(void*){
int times = 10000000;
while(times--){
pthread_spin_lock(&spin_lock);
num--;
pthread_spin_unlock(&spin_lock);
}
}
int main(){
printf("stat in main function.");
pthread_spin_init(&spin_lock,0);
pthread_t thread1,thread2;
pthread_create(&thread1,NULL,&producer,NULL);
pthread_create(&thread2,NULL,&comsumer,NULL);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
printf("print in main function:num=%d",num);
return 0;
}
```
</details>
<br />
编译
```
g++ main.cpp -lpthread
./a.out
```