2012-01-27 10 views
1

マルチスレッドアプリケーションでメソッドをロックする方法はありますか?C++アプリケーションのマルチスレッドのロックメソッド

NB:MySQLデータベースにアクセスする

お勧めします。

+0

Google「クリティカルセクション」C++(実際にはリンク先は次のとおりです。http://msdn.microsoft.com/en-us/library/windows/desktop/ms683472%28v=vs.85%29.aspx) – OSH

答えて

1

boost scoped_lockは簡単で偽の方法です。このようなオブジェクトにロックを張ると、何らかの理由でスコープが残ったときに自動的にロックが解除されます。 (リターン、例外、...)編集:また、C++ 11の点に注意してください。@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; 

}

によって語らとしてのstd :: lock_guardとstd ::をミューテックス、この例では、ここに 発見されましたhttp://developer-resource.blogspot.com/2009/01/boost-scoped-lock.html

1

あなたがC++ 11を持っている場合:

class Foo 
{ 
    std::mutex bar_mutex; 
public: 
    void bar() 
    { 
     std::lock_guard guard(foo_mutex); 

     // ... do your stuff here ... 
    } 
}; 

はヨハンのブースト版と同等です。

インスタンスごとにメソッドをロックすることに注意してください.FooインスタンスがすべてFoo::barを同時に呼び出さないようにするには、mutex staticを作成してください。

関連する問題