[英]Barrier implementation using mutex & semaphore
這是一個采訪問題:使用互斥量和信號量在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;
};
那可以解決嗎? 可以僅使用互斥體來實現屏障嗎?
互斥對象僅用於允許一個線程執行一大堆代碼並阻止其他線程。 我一直使用或制作在構造函數和析構函數上按作用域鎖定/解鎖的類。 您可以這樣使用它:
void workToDo()
{
CMutex mutex(sharedLockingObject);
// do your code
}
方法完成后,互斥對象將超出范圍,並調用析構函數。 構造函數執行阻塞鎖定,直到獲得該鎖定后才解除阻塞。 這樣,您不必擔心異常,使您擁有鎖定的互斥體,而互斥體會在不應該的情況下阻止代碼。 異常自然會解開作用域並調用析構函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.