Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在锁内返回有什么区别吗? 样本一 样本二_.net_Locking - Fatal编程技术网

.net 在锁内返回有什么区别吗? 样本一 样本二

.net 在锁内返回有什么区别吗? 样本一 样本二,.net,locking,.net,Locking,这些实现之间有什么区别吗 不,返回锁内没有区别。离开锁后,它将不再存在。共享锁对象而不是成员变量有什么好处吗?锁只适用于可以访问同一锁的对象。如果对象A和B有自己的成员变量锁,A将锁定它的锁,B将锁定它的锁。共享同一个锁对象可以减少独立锁的数量,因此可以降低陷入死锁的风险-线程A获取锁1,然后尝试获取锁2。线程B获取锁2,然后尝试获取锁1。如果时机正确,这两个线程将永远等待另一个锁被释放。在使用多个锁时,必须注意,多个锁的所有用法总是以相同的顺序使用锁。随着锁数量的增加,这变得更加困难。一般的经

这些实现之间有什么区别吗

不,返回锁内没有区别。离开锁后,它将不再存在。

共享锁对象而不是成员变量有什么好处吗?锁只适用于可以访问同一锁的对象。如果对象A和B有自己的成员变量锁,A将锁定它的锁,B将锁定它的锁。共享同一个锁对象可以减少独立锁的数量,因此可以降低陷入死锁的风险-线程A获取锁1,然后尝试获取锁2。线程B获取锁2,然后尝试获取锁1。如果时机正确,这两个线程将永远等待另一个锁被释放。在使用多个锁时,必须注意,多个锁的所有用法总是以相同的顺序使用锁。随着锁数量的增加,这变得更加困难。一般的经验法则是,每个对象实例只需要一个锁,就可以保护对象实例不被多个线程同时调用。在不同的实例之间共享同一个锁对象也可以起作用,但这可能有点过头了,因为大多数情况下,您试图保护的是对单个对象实例的私有数据的多线程访问。
Public _objLock As Object = New Object
Public ReadOnly Property MyObjects() As IEnumerable(Of Object)
    Get
        SyncLock _objLock
            If _myObjects Is Nothing Then
                _myObject = LoadMyObjects()
            End If
            Return _myObjects
        End SyncLock
    End Get
End Property
Public _objLock As Object = New Object
Public ReadOnly Property MyObjects() As IEnumerable(Of Object)
    Get
        SyncLock _objLock
            If _myObjects Is Nothing Then
                _myObject = LoadMyObjects()
            End If              
        End SyncLock
        Return _myObjects
    End Get
End Property