下面是两个线程之间互斥的Boost示例:
mutex m;
thread1:
m.lock();
... /* A */
m.unlock();
thread2:
m.lock();
... /* B */
m.unlock();
我的问题是上述代码是否可用于解决两个以上线程之间的冲突?在我看来,它只提供两个线程之间的互斥。
如果上述方法不起作用,如何在两个以上的线程中互斥?
答案 0 :(得分:2)
是的,您可以在任意数量的线程中使用它。
但是,我建议您使用std::mutex
和std::lock_guard
:
std::mutex m;
//thread1:
{
std::lock_guard<std::mutex> lg(m); //<-- Automatically locks m upon construction of lg
//... /* A */
} //<- automatically unlocks m at the end of lg's life time
//thread2:
{
std::lock_guard<std::mutex> lg(m);
//... /* B */
}
//thread3:
{
std::lock_guard<std::mutex> lg(m);
//... /* C */
}