byref 引用引用单元格的值
byref reference to reference cell's value
我偶然发现了这样的问题。我需要一个能知道它被调用了多少次的函数。它需要是线程安全的,所以我想使用 Interlocked.Increment 增加计数器(在这种情况下没有锁定,因为锁定会带走与多线程相关的所有性能增益)。
无论如何,问题是句法问题:如何在引用单元格 (&!counter) 中获取对值的引用?
let functionWithSharedCounter =
let counter = ref 0
fun () ->
// I tried the ones below:
// let index = Interlocked.Increment(&counter)
// let index = Interlocked.Increment(&!counter)
// let index = Interlocked.Increment(&counter.Value)
printfn "captured value: %d" index
functionWithSharedCounter ()
functionWithSharedCounter ()
functionWithSharedCounter ()
干杯,
F# 自动将 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)
这适用于 contents
,但不适用于 counter.Value
,因为那是 属性。
我偶然发现了这样的问题。我需要一个能知道它被调用了多少次的函数。它需要是线程安全的,所以我想使用 Interlocked.Increment 增加计数器(在这种情况下没有锁定,因为锁定会带走与多线程相关的所有性能增益)。 无论如何,问题是句法问题:如何在引用单元格 (&!counter) 中获取对值的引用?
let functionWithSharedCounter =
let counter = ref 0
fun () ->
// I tried the ones below:
// let index = Interlocked.Increment(&counter)
// let index = Interlocked.Increment(&!counter)
// let index = Interlocked.Increment(&counter.Value)
printfn "captured value: %d" index
functionWithSharedCounter ()
functionWithSharedCounter ()
functionWithSharedCounter ()
干杯,
F# 自动将 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)
这适用于 contents
,但不适用于 counter.Value
,因为那是 属性。