美しくmutexの使い方?
最近、マルチスレッドばっかりをやってるね。そのせいで、mutexのロックとアンロックをたくさんやらないとならない。よく見ると、ソースは汚くなって来た。しかも、たまにアンロックし忘れて、デッドロックしてしまった。一応、家でやっている自分のプロジェクトには、mutexのロックアンロックの為にこういうクラスを使っている。
//! @brief Mutexを自動的にロックとアンロックする。 class nuAutoMutex { public: //! @brief Constructor. nuAutoMutex(nuMutex* mutex) : m_pMutex(mutex) { // コンストラクチャでロック。 m_pMutex->lock(); } //! @brief Destructor. ~nuAutoMutex() { // デストラクチャでアンロック。 m_pMutex->unlock(); } private: nuMutex* m_pMutex; //! @brief Default constructor. //! @warning 使わないで下さい… nuAutoMutex(); };
これでmutexのポインターだけを渡して、その後にオート変数のコンストラクチャとデストラクチャで勝手にロックとアンロック。いつか、会社のプログラムに入れるつもり…