boost的'mutex'可以用于两个以上线程的互斥吗?
Can 'mutex' of boost be used to for mutual exclusion among more than two threads?
下面是两个线程之间互斥的 Boost 示例:
mutex m;
thread1:
m.lock();
... /* A */
m.unlock();
thread2:
m.lock();
... /* B */
m.unlock();
我的问题是上面的代码是否可以用来解决两个以上线程之间的冲突?在我看来,它只是提供了两个线程之间的互斥。
如果上述方法不起作用,如何在两个以上的线程之间实现互斥?
是的,您可以在任意多个线程中使用它。
不过,我建议使用 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 */
}
下面是两个线程之间互斥的 Boost 示例:
mutex m;
thread1:
m.lock();
... /* A */
m.unlock();
thread2:
m.lock();
... /* B */
m.unlock();
我的问题是上面的代码是否可以用来解决两个以上线程之间的冲突?在我看来,它只是提供了两个线程之间的互斥。
如果上述方法不起作用,如何在两个以上的线程之间实现互斥?
是的,您可以在任意多个线程中使用它。
不过,我建议使用 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 */
}