[#41778] [Bug #3515] FreeBSD wrongly raises ECONNRESET on close(2) — Yui NARUSE <redmine@...>

Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)

12 messages 2010/07/02

[ruby-dev:41895] Re: thread.bind(sym, val) { ... }

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2010-07-29 10:15:30 UTC
List: ruby-dev #41895
2010/7/29 KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>:
>> スレッド変数を一時的に設定するメソッドを加えるのはどうでしょうか。

賛成です。TLS(thread local storage)はこの用途以外での正しい使用法を思
いつきません(反論募集)。ので、正しい使用法を使いやすくするのに賛成しま
す。また提案のAPIも、Rubyのblock + ensureパターンを想起させ、「元に戻る
んだよ」感があってよいと思います。

>> たとえば Thread#bind(sym, val) { ... } として、
>> ブロックを呼び出しているあいだ、スレッド変数 sym を
>> val に設定する、というようなものです。

が、毎回".current."を書くのがイマイチかなー。Thread.current以外のTLSって
使わないですよね。しかしよいAPIを思いつきません。。。誰か。

>> また、Thread じゃなくて Fiber じゃないか、という話はあるかもしれません。
>
> Fiberがいいなぁ・・・・

Fiberよくわからない。。。

> それはそれとして、メソッドでやるよりもスレッドローカル変数を宣言する
> 構文つくったほうがうれしいような気がちょっとだけします。
> たかが変数1つのために、インデントが一段深くなるというのがどうにも・・・

ほとんどが

Thread.current.bind(:a, 100) do
  do_tls_depending_work
end

とかなので、いいんじゃないでしょうか。TLS使うような処理はinlineじゃ書け
ないでしょう。

In This Thread