ブール値を含むrefセルを使用すると、スピン待機ループがスピン待機を停止するように指示する問題を非常に簡単に解決できます。私は揮発性(すなわち[<VolatileField>]
)としてこのフラグをマークする必要がありますが、そのようなフィールドは、コンパイラによると、mutable
になる必要があります正確に私は参照をしたくないです - 私はその内容を変更可能ではなく、参照セルフィールド自体。F#:refセルの内容をvolatileとしてマークする方法はありますか?
refセルにその内容を揮発性としてマークする標準的な方法はありますか?自分自身のrefセルをロールする必要がありますか?[<VolatileField>]
の標準Refセル定義をコピーしてmutable contents
のすぐ上に貼り付けます。
open System.Threading
let refCell = ref 0
Volatile.Write(refCell, 42)
let fortyTwo = Volatile.Read(refCell)
あなたも、refの前に&
または!
を必要としない:まあ、あなただけのREF細胞と正常に動作揮発性...
'Interlocked' APIは' ref'を読み書きするときにメモリバリアを挿入します。それはあなたのために働くだろうか? – FuleSnabel