Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2009-01-08

Threadをサポートした

21:52 |  Threadをサポートしたを含むブックマーク  Threadをサポートしたのブックマークコメント

@llvm.atomic.swap.* 使いたい! っていう変な理由でThreadをサポートしました。

遊ぶのが主目的で信頼性はどうでもいいので注意が必要です。といっても、yarv2llvm全体もそういうスタンスなので問題ないと思います。rb_thread_createという目的にぴったりと思われる(かなり自信は無いのですが・・・)、APIがあったのでこれを使いました。インタフェースRubyに合せてあります。こんな感じで動いているのですが、GCとか大丈夫かは判りません。これで、@llvm.atomic.swap.*で遊べそうです。

プログラム

    YARV2LLVM::compile(<<-EOS)
def tthread
  Thread.new {
    10.times do |i|
      p i
    end
  }
  print "END"
  10.times do |i|
    puts sprintf("foo%d", i)
  end
  nil
end
EOS

出力結果例(スレッドなので場合によって異なる)

0
1
2
3
4
5
END6
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo77
8
9
foo8
foo9
トラックバック - http://d.hatena.ne.jp/miura1729/20090108/1231419160