当Interlocked类可用时,为什么在.NET中使用SyncLocks进行简单操作?

Sql*_*yan 9 .net multithreading locking interlocked synclock

我已经在VB.NET中做了一段时间的简单多线程,并刚刚进入我的第一个大型多线程项目.我总是使用Synclock声明完成所有事情,因为我认为没有更好的方法.

我刚刚了解了这个Interlocked类 - 它看起来好像这一切:

Private SomeInt as Integer
Private SomeInt_LockObject as New Object

Public Sub IntrementSomeInt
    Synclock SomeInt_LockObject
        SomeInt += 1
    End Synclock
End Sub
Run Code Online (Sandbox Code Playgroud)

可以用单个语句替换:

Interlocked.Increment(SomeInt)
Run Code Online (Sandbox Code Playgroud)

这会在内部处理所有锁定并修改数字.这比为简单操作编写自己的锁要简单得多(更长时间运行或更复杂的操作显然仍然需要自己的锁定).

当我可以使用这些Interlocked方法完成同样的事情时,我是否有理由使用专用锁定对象来进行自己的锁定?

SLa*_*aks 9

你是对的; Interlocked应该在这里使用,并且会比它更快SyncLock.
但是,这Interlocked门课并不为人所知.

但是,有些情况下您需要使用SyncLock而且Interlocked无法提供帮助.

  • 如果您正在使用两个不同的变量,"Interlocked"是不够的. (3认同)

Cha*_*ion 5

这是因为没人知道.传播这个词!