这是一个面试问题:n
使用互斥锁和信号量实现线程之间的屏障。我提出的解决方案:
class Barrier {
public:
Barrier(unsigned int n) : _n(n),_count(0),_s(0) {}
~Barrier() {}
void Wait() {
_m.lock();
_count++;
if (_count == _n) { _s.signal(); }
_m.unlock();
_s.wait();
_s.signal();
}
private:
unigned int _n;
unigned int _count;
Mutex _m;
Semaphore _s;
};
这个解决方案好吗?可以仅使用互斥锁来实现屏障吗?