2016-05-31 3 views
2

alts!!またはalts!が呼び出されたときに、1つのポートだけが使用されることが保証されていますか?clojure.core.async/alts !! - 保証されるのは1つのチャネルだけですか?

(let [[value channel] (alts!! [c1 c2 c3 [1 c4]])] 
    (cond (= channel c1) 
     ; at this point, is it guaranteed that alts!! 
     ; did not take from c2 and c3, and did not call (>!! c4 1)? 
     (do-something))) 

私はドキュメントに関連するものは見つかりませんでした。私はそれが未定義であると推測していますか? alts!さんdocstring機能によると

+2

はい、それはアルツハイマーのポイントです! –

答えて

3

は "いくつかのチャンネル操作の高々1を完了します。[...]"。

これは、関数が呼び出されたときに、ポートで1つまたはゼロ(つまり駐車する)操作が行われることを意味します。 ":priorityオプションが真でない場合、複数のポート操作が準備されている場合は、非確定的な選択が行われます"とドキュメントストリングに記述されているように、非決定論的な操作です。

関連する問題