निम्नलिखित परीक्षण कोड (एफ #) परिणाम नहीं लौटा रहा है मैं उम्मीद थी:.NET 4 spinlock
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 की संख्या, लेकिन, इसके बजाय, यह छोटे मान लौटाता है जैसे कि कोई पारस्परिक बहिष्करण नहीं हो रहा है।
कोई विचार क्या गलत है?
धन्यवाद। ऐसा लगता है कि कक्षाओं में खेतों की प्रतिलिपि नहीं बनाई गई है लेकिन बाकी सब कुछ। यदि यह सही है तो यह जटिल अंकगणित जैसे अन्य अनुप्रयोगों के लिए भी प्रभाव डालता है, जहां आप स्ट्रक्चर की प्रतिलिपि से बचना चाहते हैं (और सी # वर्तमान में एफ # से बहुत तेज है)। –