Peterson 算法
(1)定义:
Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个进程访问一个共享的单用户资源而不发生访问冲突。
(2)实现:
//Linux
#include <iostream>
#include <thread>
using namespace std;
#define A 1
#define B 2
int flag;//谦让 A、B
int a, b;//表示线程的进入与离开,1 —— 进入、2 —— 离开
void PetersonA(){
while (1) {
a = 1;
flag = B;
//while的意义就是解决了,两个线程同时到达时会阻塞
//谁相对意义上的后到,谁就后访问临界资源
while (b && flag == B);
cout << (A == flag ? "true" : "false") << endl;
a = 0;
}
}
void PetersonB(){
while(1) {
b = 1;
flag = A;
while (a && flag == A);
cout << (B == flag ? "true" : "false") << endl;
b = 0;
}
}
int main() {
thread t1(PetersonA);
thread t2(PetersonB);
t1.join();
t2.join();
return 0;
}
(3)结果
全部都是true,用CTRL + c 结束进程