タグ

!tumblr-techとthreadに関するtyruのブックマーク (3)

  • UNIX上でのC++ソフトウェア設計の定石 (3) - memologue

    鉄則3: マルチスレッドのプログラムでのforkはやめよう マルチスレッドのプログラムで、「自スレッド以外のスレッドが存在している状態」でfork*1を行うと、さまざまな問題を引き起こす可能性があります。「問題」の典型例としては、子プロセスのデッドロックが挙げられます。問題の詳細を把握しないまま、マルチスレッドのプログラムで不用意にforkするのはやめましょう! 何が起きるか 実例から見てみましょう。次のコードを実行すると、子プロセスは実行開始直後のdoit() 呼び出し時、高い確率でデッドロックします。 void* doit(void*) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); struct timespec ts = {10, 0}; nanoslee

    UNIX上でのC++ソフトウェア設計の定石 (3) - memologue
  • Singletonクラスのアクセスを簡単にマルチスレッド対応させたい - krustf の雑記

    Singletonクラスを作るたびにそのクラスのメンバ変数としてMutexとかを宣言したくないんです。冗長だし。 Lock, UnLockの方法もきっと面倒なんですよね。アクセスするたびにロックを手動で書くような。 そういったものを書かせないで、これまでみたいにget_instanceメソッドを呼び出してアクセスできるような形にしたい。 ということで、そんな感じの物を書いてみました。C++0x無いと動きません。GCC4.4(boost1.43.0), MSVC10(boost1.44.0)で確認しました。 (boost1.43.0はrvalue referenceに対応できてないので冗長なコードが混ざってます) ちゃんと定義しておくべきだろうなというのがいくつか欠けてる気がしますが…。 http://ideone.com/N2sFR 当ならポリシーベースにするべきなのかな、と思ったのです

    Singletonクラスのアクセスを簡単にマルチスレッド対応させたい - krustf の雑記
  • 多分、こんなんでいいはず。 - krustf の雑記

    先日書いた記事 - Singletonクラスのアクセスを簡単にマルチスレッド対応させたい - krustf の雑記 で書きましたけど、最終的に今書いてるライブラリに追加したものです。 MSVC10, boost1.44.0で動作確認しました。 #include <utility> #include <boost/thread/mutex.hpp> // マルチスレッド // ------------------------------------------- template< class T > class multi_thread_access { public: multi_thread_access( T* ) : Lock_( SingletonMutex_ ) {}; multi_thread_access( multi_thread_access&& other ) : L

    多分、こんなんでいいはず。 - krustf の雑記
  • 1