複数のスレッドから1つの変数にアクセスする際、システム側のスレッドスケジューリング次第で、予期せぬ書き換えが起こってしまう場合があります。その為、ある1つのスレッドが変数にアクセスしている際は他のスレッドをブロックする排他制御やスレッドの同期を行う必要があります。C++でJavaのsynchronizedメソッド/ブロックと同じような記法でクリティカルセクションを実装する方法の1つにboost::threadライブラリのmutexとconditionクラスがあります。 mutex クラスの使い方 スレッドの排他制御を実現できます。具体的な使い方は、mutexインスタンスをmutex::scoped_lockクラスのコンストラクタの引数に指定し、そのインスタンスを取得することでロックをかけられます。あるスレッドが上の処理を以ってmutexインスタンスにロックをかけた場合、その他のスレッドは再
Single Threaded Execution メモ Immutable メモ Guarded Suspension メモ Balking メモ Producer-Consumer メモ Read-Write Lock メモ Thread-Per-Message メモ Worker Thread メモ Future メモ Two-Phase Termination メモ Thread-Specific Storage メモ Active Object メモ ちなみに頻繁にインクルードされている "../thread_helper.h" というのは以下の内容になっています。 #ifndef MTDP_THREAD_HELPER_H_INCLUDED #define MTDP_THREAD_HELPER_H_INCLUDED #include <boost/thread.hpp> #inc
デザインパターン(マルチスレッド)まとめ スレッドを起動する時間をケチるのと、スレッド数の管理を行うパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。 これ、request じゃなくて boost::function0 にすれば汎用的な worker_thread クラスが作れそう。 というか namespace worker_thread と class worker_thread で同じ名前なのにちゃんとコンパイルできるのには驚いた。 main.cpp #include <boost/thread.hpp> #include <boost/shared_ptr.hpp> #include "channel.h" #include "client_thread.h" namespace mt
例えば、Twitterから同時にデータを取得するような例とかを考える。自分で結構考えてみたけど、処理が同時には走らない。どの辺がおかしいのかよくわからん。。。 #!/usr/bin/ruby -Ke require 'rubygems' require 'thread' require 'enumerator' require 'pp' require 'hpricot' require 'mechanize' require 'kconv' require 'yaml' gem 'twitter4r', '>=0.3.0' require 'twitter' $KCODE='e' class Friend attr_accessor :name attr_accessor :source attr_accessor :agent attr_accessor :following attr
« CNET, 米ZDNetを買収 | メイン | awk の素敵な使い方 » 2000年07月20日 ruby と timeout と thread 以前 network がらみのコードを書いたときに困っていた timeout の解決方法がようやく判明。 require 'timeout' begin timeout(5) # timeout is 5 sec. # processing... end # end of timeout-blockrescue print $stderr, "timeout happened\n" exitendとすると、timeout の中のブロックにタイムアウト制限をかけることができる。 (内部ではただ単純にタイマーを起動して raise かけているだけ) ついでにスレッドに関するメモ。require 'thread' array.each
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く