利用四把锁同步线程
class ZeroEvenOdd {
private:
int n;
mutex a,b,c,d;
public:
ZeroEvenOdd(int n) {
this->n = n;
b.lock();
c.lock();
d.lock();
}
void zero(function<void(int)> printNumber) {
for(int i=0;i<n;i++){
a.lock();
printNumber(0);
b.unlock();
c.unlock();
}
}
void even(function<void(int)> printNumber) {
for(int i=2;i<=n;i+=2){
b.lock();
d.lock();
printNumber(i);
a.unlock();
}
}
void odd(function<void(int)> printNumber) {
for(int i=1;i<=n;i+=2){
c.lock();
printNumber(i);
a.unlock();
d.unlock();
}
}
};