我遇到过一种情况,其中包含布尔值的ref单元格允许我非常方便地解决告诉旋转等待循环停止旋转等待的问题。我需要将此标志标记为volatile(即[<VolatileField>]
),但根据编译器,这样的字段需要为mutable
,这正是我不希望引用的 - 我想要它的内容是可变的,而不是参考单元字段本身。
是否有标准的方法告诉ref单元格将其内容标记为易失性,或者我是否需要滚动自己的ref单元格(即复制粘贴标准ref单元格定义,[<VolatileField>]
卡在mutable contents
之上1}})?那么,纠正这个事实,你不能将记录字段标记为易变...
答案 0 :(得分:8)
Volatile.
或Interlocked.
方法只适用于ref cell:
open System.Threading
let refCell = ref 0
Volatile.Write(refCell, 42)
let fortyTwo = Volatile.Read(refCell)
在ref cell变量名之前你甚至不需要&
或!
,它们已经是引用。与here所描述的Volatile
相比,Interlocked
和[<VolatileField>]
方法更易于推理。