stm

    0

    1答えて

    Clojureを初めて使用し、トランザクションモデルを理解しようとしています。 alterとcommuteで遊んでいるとき、私はの後にrefをcommuteとした場合、トランザクションは何もコミットしない(または何も変更しない)ことに気付きました。 例えば: (def counter (ref 0)) (def i (ref 0)) (future (dosync (ref-se

    0

    2答えて

    現在Clojureを学習しており、STMを使用して並行処理を行う方法がわかりません。私が達成しようとしている作業は非常に簡単です。文字列のベクトルがあり、それぞれの文字列に対して同時に関数を実行し、その文字列を関数が返すものに置き換えたいと思います。 私は現在のpmapで非常に簡単にこれを行うことができます。 (pmap function string_vector) は、どのように私はClo

    0

    1答えて

    私はまだClojureでnoobです。大学の銀行取引シナリオに関する問題を解決しようとしています。 だから問題は非常に簡単です、私はクレジット、デビットとお金のソリューションを開発する必要があります。 私はここに停止: (def account (ref 100)) (defn credit [account amount] "Credit" (dosync

    6

    1答えて

    : atomically $ do if valueInLocalStorage key then readValueFromLocalStorage key else do value <- unsafeIOToSTM $ fetchValueFromDatabase key writeValueToLocalStorage key va

    2

    1答えて

    を変更されて停止するまで待ち: ブロックが実行のスレッド が一度続行変更されているが停止し見てファイルまで変更が停止するか、その間隔がある時間よりも大きいしきい値(デバウンシング) 現在、私はTSemを使用して正しく動作させようとしていますが、これらのp roblems: スレッドがまったくブロックしない、と私は例外 に投げるためにSTMを引き起こし、 スレッドブロック無期限に例外をスロー、それも

    4

    1答えて

    トランザクションが失敗したSTMの内部にいて、通常の制御フロー(STM衝突などなし)の一部として再試行した場合、是正措置を講じる方法以外の人に指示することができます。 純粋に「発信」の場合、私のSTMは引き続き純粋に再生できます。 どうすればよいですか発信 IOがSTMから再試行されましたか? 誰かがこれに遭遇しましたか?これはどれほど悪いのでしょうか?

    7

    2答えて

    アトミック変更ログとして使用するには、データ構造に関するアドバイスが必要です。 私は次のアルゴリズムを実装しようとしています。メモリ内のマップを更新するために入ってくる の変更の流れがあります。 Haskellのような擬似コードでは、DataSetがマップされ update :: DataSet -> SomeListOf Change -> Change -> STM (DataSet, Som

    7

    3答えて

    私は仕事の集まりを含む1つのrefを共有する100人の労働者(エージェント)を抱えています。このコレクションは、タスクを持っていますが、各ワーカーは(dosyncブロックで)このコレクション、それを印刷し、時には(dosyncブロックで)コレクションに戻ってそれを入れてから、一つのタスクを取得: (defn have-tasks? [tasks] (not (empty? @t

    2

    2答えて

    retryに達するSTMという式を実行すると、スレッドがブロックされ、エントリが変更されるとトランザクションが再度実行されます。 しかし、私は思っていた: 我々は再試行につながるという特定のブランチでは、実際に使用されていない、STM変数を読めば、それは再びトランザクションを実行しようとする更新のでしょうか? スレッドはブロックされていますが、実際にはブロックされていますか?他の潜在的に待機してい

    14

    1答えて

    私はSTMを使用するプログラムをデバッグしようとしています。あなたがここに見ることができるようにThreadScopeの測定値は非常に高いCPUアクティビティを指摘されています だから私は、これが頻繁に中止し、取引のために起こっているかどうかを確認しようとしています。 atomically $ do someWork ... `orElse` do unsafeIO