是存在這樣的可能性:
- 線索1組的運行
Threading.Interlocked.Increment(hitCount)
- 線程2個運行
Threading.Interlocked.Increment(hitCount)
- 線索1組的運行
Return hitCount
- 線程2個運行
Return hitCount
在步驟3和4,hitCount將是相同的值。
但修復容易Interlocked.Increment返回增加後的值,所以只要改變你的代碼:
Private Shared hitCount As Long = 1L
Public Shared Function GetIt() As Long
Return Threading.Interlocked.Increment(hitCount)
End Function
編輯 還是現在根據您的修改,你有一個漂亮的位定時孔。反正那麼這就是你想要的東西:
Public Shared Function GetIt() As Long
Dim localHitCount As Long = Threading.Interlocked.Increment(hitCount)
Console.Writeline("Something, something....")
Return localHitCount
End Function
編輯 那麼做到這一點(這正是邁克爾以下建議)
Private Shared hitCount As Long = 1L
Public Shared Function GetIt() As Long
Dim localHitCount As Long = Threading.Interlocked.Increment(hitCount)
DoSomethingQuick(localHitCount)
Return localHitCount
End Function
我想你會打一個溢出異常,一旦你達到'Integer.MaxValue'? 'hitCount'是一個Long,但你返回一個Integer。 – 2010-02-09 17:09:10
哈哈,修正了代碼。 – 2010-02-09 17:11:06