dr.*_*vil 4 .net performance multithreading interlocked
这段代码是线程安全的吗?或者这样说:
无论如何调用GetIt()并且GetIt()将返回相同的数字到2个不同的线程
Private Shared hitCount As Long = 1
Public Shared Function GetIt() As Long
Threading.Interlocked.Increment(hitCount)
DoSomethingQuick(hitCount)
Return hitCount
End Function
Run Code Online (Sandbox Code Playgroud)
看起来这是可能的,那么我应该Interlocked.Read()在一个区块中使用或锁定整个东西吗?
shf*_*301 10
是的,有可能:
Threading.Interlocked.Increment(hitCount)Threading.Interlocked.Increment(hitCount)Return hitCountReturn 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
Run Code Online (Sandbox Code Playgroud)
编辑 或者现在根据你的编辑,你有一个很好的计时漏洞.无论如何,这就是你想要的:
Public Shared Function GetIt() As Long
Dim localHitCount As Long = Threading.Interlocked.Increment(hitCount)
Console.Writeline("Something, something....")
Return localHitCount
End Function
Run Code Online (Sandbox Code Playgroud)
编辑 然后这样做(这正是迈克尔在下面建议的)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |