アトミックメソッドの概念は、メソッドを同期として定義できるJavaのようにC++には存在しません。C ++でそれに最も近いのは、次のようにScopedMutexクラスを作成することです。
class ScopedMutex {
public:
ScopedMutex(pthread_mutex *m) : theMutex_(m) {pthread_mutex_lock(theMutex_);}
~ScopedMutex() { pthread_mutex_unlock(theMutex_); }
// Add appropriate copy constructors and operator=() to disallow mutex copy
// Or consider passing in a reference
private:
pthread_mutex *theMutex_;
};
次に、関数で次のように使用します。
void foo ( Bar* bar , void(Bar::*qux)(void) )
{
ScopedMutex m(&aMutex); // This mutex must be defined/initialized elsewhere
if ( bar )
{
bar->qux();
}
// The ScopedMutex goes out of scope when the function does,
// thus releasing the lock
}
しかし、barオブジェクトを使用する他のすべてのメソッドで同じミューテックスを使用しない限り、これは何の役にも立ちません。
スコープ付きミューテックスは、いくつかのreturnステートメントがある複雑なロジックを持つ関数がある場合に特に便利です。したがって、関数がスコープ外になるとアンロックされるミューテックスを手動でロック解除する必要はありません。