Printable Version of this PageHome PageRecent ChangesSearchSign In

20 May 2011


[Smalltalk] Sleep sortのpromise版


SmalltalkでSleep sort

VisualWorks限定であればPromise使えばもう少し短く書ける。Collection>>sleepSortedの実装は同じ。


Collection>>sleepSorted: toPositiveIntegerBlock
| ans |
self isEmpty ifTrue: [^Array new].
ans := OrderedCollection new.
(self collect:
[:eachElem |
[| val |
val := toPositiveIntegerBlock value: eachElem.
val seconds wait.
ans add: val] promise]) do: [:p | p value].
^ans


並行的に動いているのは、以下のようにすればわかる。


[#(4 5 3 1 2) sleepSorted] timeToRun => 5.000232 seconds


5秒より少し大きくなるのはスレッドの生成分などですね。

Last modified 20 May 2011 at 11:56 am by ume