下面的測試代碼(F#)沒有返回結果,我期望:.NET 4自旋鎖
let safeCount() =
let n = 1000000
let counter = ref 0
let spinlock = ref <| SpinLock(false)
let run i0 i1() =
for i=i0 to i1-1 do
let locked = ref false
try
(!spinlock).Enter locked
if !locked then
counter := !counter + 1
finally
if !locked then
(!spinlock).Exit()
let thread = System.Threading.Thread(run 0 (n/2))
thread.Start()
run (n/2) n()
thread.Join()
!counter
我期望的SpinLock
相互排斥的計數器,因此,它返回計數爲1,000,000,但相反,它會返回較小的值,就好像沒有發生互斥一樣。
任何想法有什麼不對?
謝謝。看起來像類中的字段不會被複制,而是其他所有內容。如果這是正確的,那麼它也會影響其他應用程序,例如複雜算術,您希望避免複製結構(而C#目前比F#快得多)。 – 2010-06-11 23:32:01