Skip to content

Instantly share code, notes, and snippets.

@miura1729
Created October 29, 2011 09:49
Show Gist options
  • Save miura1729/1324289 to your computer and use it in GitHub Desktop.
Save miura1729/1324289 to your computer and use it in GitHub Desktop.
ytl concurret revisionsサポート案
Threadクラス (Rubyのとは違うので名前を替えたほうがいいか?)
クラスメソッド
    new スレッドを作成する。ブロックを渡し、作成したスレッドでブロックを実行する。
        Thread.newを実行したselfをコピーしブロックはそのselfを使う。
        つまり、インスタンス変数を使用しても親スレッドとは競合しない。
 Threadクラスのインスタンスを返す
  インスタンス変数
    join スレッドの実行を待ち合わせする。子スレッドが終了したらmerge処理を行う。
        merge処理はデフォルトでは親スレッドのselfを子スレッドのselfにコピーすることだが、
        self_mergeメソッドでカスタマイズできる。
self_mergeメソッド
  Thread.newを実行するオブジェクトにself_mergeメソッドが定義されてれば、join時のmergeに呼び出される。self_mergeの
  返した値がselfになる。
  self_mergeは
    self_merge(cself)
  と呼ばれる。cselfは子スレッドのselfで親スレッドのselfは"self"でアクセスできる。
  例、親スレッドと子スレッドの合計を@totalに入れる場合。
    def self_merge(cself)
  @total += cself.total
      self
    end
デフォルトのself_mergeは次のように定義される
    def self_merge(cself)
cself
end
      
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment