C ++应用程序多线程中的锁定方法

时间:2012-01-27 15:10:32

标签: c++ sql concurrency synchronization

有没有办法在多线程应用程序中锁定方法?

注意:访问MySQL数据库

最好的问候。

2 个答案:

答案 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