K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please set comment :).

_15(Fri)

Intel も Dual core か。どんなアーキテクチャにするんだろうなぁ。


[langsmith:197] C#の匿名メソッド..なぜ、ローカル変数を共有するのか?

より、

delegate void D();
class Test
{
   static D[] F() {
       D[] result = new D[3];
       int x=0;
       for(int i=0;i<3;i++) {
           int y=0;
           result[i] = delegate { Console.WriteLine("{0} {1}",++x,++y); };
       }
       return result;
   }

   static void Main() {
       foreach(D d in F()) d();
   }
}

出力結果:
  1 1
  2 1
  3 1

まぁ、元の主張はともかく、y の値がこうなるのが意外だった。っていうか、C# の文法ってこんな感じなんだ。

prs = []
x = 0
3.times{|y|
  y = 0
  prs << lambda{puts "#{x+=1} #{y+=1}"}
}
prs.each{|e|
  e.call
}

#=>
1 1
2 1
3 1

と言われると確かにそうだなぁ、と思うのだけれど。

C っぽい文法でクロージャに見慣れてないってことかな。


arton 効果で凄い人数。


ありゃりゃ、ProtoObject が 6 票で最大だったのに、BasicObject (1票) が勝ってしまった。

個人的にも ProtoObject がいいなぁとは思ってたんだけれど。


家庭用メガスターいいなぁ。欲しい。


春っぽくしてみた。


停滞っていうか、なんか考えれば考えるほど駄目になっていく。


lock-free, wait-free アルゴリズムは、ロックを用いずに何かを操作する手法。さまざまなデータ構造について、これらの方式が研究されている。

で、この二つの違いが未だにわからん。

参考: いろいろ。Some Notes on Lock-Free and Wait-Free Algorithms とか。IBM dW : Java technology : Javaの理論と実践: アトミックで行く - Japan とか。

Lock-freeアルゴリズムとwait-freeアルゴリズム 他のスレッドに任意の遅れが生じても(あるいは失敗が起きても)、どのスレッドも継続して進行する場合には、そのアルゴリズムはwait-free と言われます。対照的にlock-free アルゴリズムでは、一部 のスレッドのみが継続して進行すればよいのです。(別の仕方で定義すると、wait-freeでは他のスレッドのアクションやタイミング、インターリーブ、またはスピードによらず、各スレッドはそのスレッドのステップとして指定された数の演算操作を正しく行うことが保証されている、ということです。この指定数は、システム中にあるスレッド数の関数になっている場合があります。例えば10のスレッドがそれぞれCasCounter.increment()操作を一度行うと、最悪の場合、各スレッドは増加操作を完了するまでに最大9回のリトライを行う必要があることになります。)

違い、わからん orz


CAS による fetch-and-add は lock-free だけれど、wait-free ではない。はて。

wait-free というのは、計算量がばしっと決まっているってこと?


http://c2.com/cgi/wiki?WaitFreeSynchronization

A wait-free implementation of a concurrent data object is one that guarantees that any process can complete any operation in a finite number of steps of finite time, regardless of the execution speeds of the other processes.


lock-free はわかるんだけどな。wait-free がわからない。原著論文を読もう。


CAS による fetch-and-add は、競合を起こすと無限の時間がかかる可能性があるから、wait-free といえない、ということだろうか。

たとえば、ハードウェアによってqueue かなんかでロックの機構が実装されていていれば、それは wait-free になるんだろうか。


lock
なんかするために、ロック。排他制御。他にやらせない。クリティカルセクションとか。
lock-free
なんかしたとき、成功するのはただひとつ。
wait-free

で、Wait-Free Synchronization (1993) を読んでみたら、証明する話なのね...。サパーリ。

レンマってメンマの親戚ですか。


うー、頭痛い。

_maeda(Sat Apr 16 11:43:09 JST 2005)
  • lockを使うものはブロッキング。クリティカルセクション。
  • ノンブロッキングなアルゴリズムは、アトミックな操作とそうでない操作を何段階か組み合わせてひとまとまりの操作(メモリ割り付けとか、キュー操作とか)を行う。途中で失敗して最初からやり直しになることも。
    • lock-free ノンブロッキングなアルゴリズムのうち、みんなが一斉にやったときでも、誰か一人は進み続けることが保証されているもの。他の人は途中で失敗したり、ずっとリトライしたり。
    • wait-free ノンブロッキングなアルゴリズムで、みんなが一斉にやっても、みんなが進み続けることができるもの。ずっと失敗し続ける可能性が無いと証明されてるもの。
_ささだ(Sun Apr 17 01:12:09 JST 2005)

 毎度ありがとうございます。納得しました。

_とおる。(Mon Apr 18 11:56:14 JST 2005)

 むしろサンマの親戚。


好きにコメントを編集してください。ただし、あまり他の人のコメントを書き換えることは感心しません。



back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $