2016-11-27 85 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