2016-11-27 128 views
2

我有兩個線程(第一個用於讀取,第二個用於寫入)和一個共享資源(例如數組)。如何保護線程之間的資源? (塊讀取,而第二個線程正在寫)(對不起,英語不好)鎖定資源(線程,C++)

+0

這裏的其他人之間的一種方法:(http://en.cppreference.com/w/cpp/thread/lock_guard)'的std :: lock_guard'] –

+1

使用一個互斥體。這是標準的解決方案。 –

+0

我正在閱讀有關互斥信息。在例子中,互斥鎖在一個函數中阻塞資源。但在我的情況下,這是不同的功能。這對我有幫助嗎? –

回答

4

std::mutex裹在std::lock_guard是新手在多線程中最簡單的方法。

事情是這樣的:

class Resource { 
public: 
    T Read() { 
     std::lock_guard<std::mutex> lock(m_mutex); 
     // read 
    } 
    T Write() { 
     std::lock_guard<std::mutex> lock(m_mutex); 
     // write 
    } 
private: 
    std::mutex m_mutex; 
}; 
+0

謝謝!這就是說,如果互斥鎖已經鎖定(例如在讀取中),寫入將等待(鎖定),然後再次鎖定資源? –

+0

@ЛеонтийХачуев確實如此。 – Starl1ght