Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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
C#锁定私有静态对象_C#_.net_Multithreading_Locking - Fatal编程技术网

C#锁定私有静态对象

C#锁定私有静态对象,c#,.net,multithreading,locking,C#,.net,Multithreading,Locking,嗨,根据 为了锁定,可以声明对象: 但当我需要从静态方法锁定它时,我需要将其声明为静态: 然后是MSDN页面上的更多内容 锁(“myLock”)是一个问题,因为进程中使用相同字符串的任何其他代码都将共享相同的锁 因此,如果它是一个静态对象,而不是一个字符串,那么当同一个方法被多次调用时,它们中的每一个都会尝试锁定这个锁,因为它是同一个静态对象,所以它们实际上是共享锁的,这会有问题吗 谢谢你抽出时间 因此,如果它是一个静态对象,而不是一个字符串,那么当多次调用同一个方法时,它会有问题吗 不完全是。

嗨,根据 为了锁定,可以声明对象:

但当我需要从静态方法锁定它时,我需要将其声明为静态:

然后是MSDN页面上的更多内容

锁(“myLock”)是一个问题,因为进程中使用相同字符串的任何其他代码都将共享相同的锁

因此,如果它是一个静态对象,而不是一个字符串,那么当同一个方法被多次调用时,它们中的每一个都会尝试锁定这个锁,因为它是同一个静态对象,所以它们实际上是共享锁的,这会有问题吗

谢谢你抽出时间

因此,如果它是一个静态对象,而不是一个字符串,那么当多次调用同一个方法时,它会有问题吗

不完全是。字符串是特殊的,它们可以被拘留。不能像控制其他对象那样控制其可见性

基本准则:

  • 使lockObject与受保护的资源保持密切的1对1关系。在数量、范围和寿命方面。因此,使用静态锁对象来保护静态数据
  • 尽可能保持lockObject的私密性,将其公开会增加死锁的风险。因此,也要避免锁定类型和字符串
因为它是同一个静态对象,所以它们实际上共享锁

访问共享资源的所有代码都必须共享(锁定)同一个lockObject实例。私家锁坏了

因此,如果它是一个静态对象,而不是一个字符串,那么当多次调用同一个方法时,它会有问题吗

不完全是。字符串是特殊的,它们可以被拘留。不能像控制其他对象那样控制其可见性

基本准则:

  • 使lockObject与受保护的资源保持密切的1对1关系。在数量、范围和寿命方面。因此,使用静态锁对象来保护静态数据
  • 尽可能保持lockObject的私密性,将其公开会增加死锁的风险。因此,也要避免锁定类型和字符串
因为它是同一个静态对象,所以它们实际上共享锁


访问共享资源的所有代码都必须共享(锁定)同一个lockObject实例。私家锁坏了

是的,它们都会锁定对象的同一个实例。这是个问题吗?看来这就是你的意图。当然,对于static,每个实例都使用相同的锁(而不是不同的锁),但这是static所期望的。。。我遗漏了你的问题吗?是的,它们都会锁定对象的同一个实例。这是个问题吗?看来这就是你的意图。当然,对于static,每个实例都使用相同的锁(而不是不同的锁),但这是static所期望的。。。我遗漏了你的问题吗?如果我有一个方法将以并行方式多次调用,并且这个方法将锁定lockObject,那么是否存在线程安全问题?如果是,如何确保螺纹安全?谢谢。如果我有一个方法将以并行方式多次调用,并且这个方法将锁定lockObject,那么是否存在线程安全问题?如果是,如何确保螺纹安全?非常感谢。
    private Object thisLock = new Object();
    private static Object thisLock = new Object();