C# 是否可以对同一资源应用不同的锁

C# 是否可以对同一资源应用不同的锁,c#,locking,critical-section,C#,Locking,Critical Section,我有一个场景,需要对代码段应用不同的锁。假设我有n台服务器,对于每台服务器,我调用一个方法,将一些json写入一个文件 问题陈述: 目前,我只有一台服务器,它调用一个方法a(),该方法将一些字符串行转换为json,然后转换为文件(每次调用时,都会转换为字符串行),有时,当方法a()多次写入行时,就会出现问题,即它会向该方法发送两行: 可能的解决方案(可能): 我想在方法A()上应用n个锁,但它会等待服务器A完成写入,然后服务器B才有机会写入文件。为此,如何使用ReaderWriteLock/re

我有一个场景,需要对代码段应用不同的锁。假设我有n台服务器,对于每台服务器,我调用一个方法,将一些json写入一个文件

问题陈述:

目前,我只有一台服务器,它调用一个方法
a()
,该方法将一些字符串行转换为json,然后转换为文件(每次调用时,都会转换为字符串行),有时,当方法
a()
多次写入行时,就会出现问题,即它会向该方法发送两行:

可能的解决方案(可能):


我想在方法
A()
上应用n个锁,但它会等待服务器A完成写入,然后服务器B才有机会写入文件。

为此,如何使用
ReaderWriteLock/readerwritelocksim
呢?只需在需要保护的代码上使用锁即可。如果任何流锁定了某些代码,则另一个流必须等待,直到锁释放,然后另一个流才能访问代码并写入。您是说存在单个资源,但在不同服务器上运行的应用程序的不同实例可能会尝试更新它,您需要确保一次只有一台服务器这样做吗?如果是这样的话,
lock
将不会有帮助,因为
lock
不会在不同服务器上运行的相同应用程序之间“共享”。在这种情况下,一个选项是数据库中的一个表,用于跟踪资源是否被锁定。@ScottHannen服务器之间共享的锁不会防止与不同锁的锁重叠吗?是的,但问题是如何创建服务器之间共享的锁。
lock
语句没有帮助。一台服务器不“知道”另一台服务器上的锁。如果您知道只有一个数据库实例,那么数据库解决方案就可以工作。它的伸缩性不好。如果可能的话,一个更好的解决方案是使您的应用程序更能容忍尝试进行相同更新的多个进程。例如,他们是否可以不更新资源而向队列发送消息,然后其他人读取队列并进行更新?