簡體   English   中英

使用互斥和信號量的屏障實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM