Syntax byref引用到引用单元格';s值
我偶然发现了这样的问题。我需要一个函数,它将知道它被调用了多少次。它需要是线程安全的,所以我想使用Interlocked.Increment增加计数器(在这种情况下,没有锁作为锁会带走与多线程相关的所有性能增益)。 无论如何,问题是语法:如何获取引用单元格(&!counter)中的值的引用 干杯,F#自动将Syntax byref引用到引用单元格';s值,syntax,f#,Syntax,F#,我偶然发现了这样的问题。我需要一个函数,它将知道它被调用了多少次。它需要是线程安全的,所以我想使用Interlocked.Increment增加计数器(在这种情况下,没有锁作为锁会带走与多线程相关的所有性能增益)。 无论如何,问题是语法:如何获取引用单元格(&!counter)中的值的引用 干杯,F#自动将ref类型的值视为byref参数,因此不需要任何特殊语法: let functionWithSharedCounter = let counter = ref 0 fun (
ref
类型的值视为byref
参数,因此不需要任何特殊语法:
let functionWithSharedCounter =
let counter = ref 0
fun () ->
let index = Interlocked.Increment(counter)
printfn "captured value: %d" index
您还可以引用可变字段,因此也可以编写以下内容:
let index = Interlocked.Increment(&counter.contents)
这适用于归档的
内容
,但不适用于计数器.Value
,因为这是一个属性。很遗憾我没有尝试这个。出于某种原因,我认为ref的实现是:type ref
let index = Interlocked.Increment(&counter.contents)