有没有办法在多线程应用程序中锁定方法?
注意:访问MySQL数据库
最好的问候。
答案 0 :(得分:1)
boost scoped_lock是一种简单易行的方法。将锁定绑定到这样的对象会在出于任何原因而自动释放锁定。 (返回,例外,......)编辑:另请注意c ++ 11:std :: lock_guard和std :: mutex由@Useless告知
class Foo
{
public:
void bar()
{
// Will grab the resource or wait until free
::boost::mutex::scoped_lock lock(m_mutex);
//Critical section
// No need to unlock the lock will do that itself.
}
private:
boost::mutex m_mutex;
}
这个例子在这里找到了 http://developer-resource.blogspot.com/2009/01/boost-scoped-lock.html
答案 1 :(得分:1)
如果你有C ++ 11:
class Foo
{
std::mutex bar_mutex;
public:
void bar()
{
std::lock_guard guard(foo_mutex);
// ... do your stuff here ...
}
};
相当于Johan的Boost版本。
请注意,它们都会锁定每个实例的方法 - 如果希望阻止所有Foo实例同时调用static
,请创建互斥锁Foo::bar
。