0

我的 ASP.NET 应用程序提供对各种数据块的访问。每个块都可以被一个或多个用户同时访问,因此应用程序必须防止冲突。

经过大量考虑,我认为乐观并发不是这种情况的最佳解决方案,目前将锁定视为一个合适的选择。

我可以很容易地让所有请求一个一个地处理SyncLock,如下所示:

私有共享访问锁作为新对象

 SyncLock AccessLock

 ..Do some reading and writing here

 End Synclock

但这极大地限制了应用程序的可扩展性。

因此,我正在考虑以某种方式仅对特定数据部分的访问进行排队。例如,一个队列用于访问数据的一部分,而另一个队列用于访问另一部分数据。

有没有办法自定义同步锁定以对数据的不同部分使用不同的队列,而不是对所有内容仅使用 1 个队列?我的意思是它可以让我手动指定诸如“SyncLock ("Group1") 和 "SyncLock ("Group2") 之类的东西。

4

2 回答 2

0

有没有办法自定义同步锁定以对数据的不同部分使用不同的队列,而不是对所有内容仅使用 1 个队列?我的意思是它可以让我手动指定诸如“SyncLock ("Group1") 和 "SyncLock ("Group2") 之类的东西。

是的。您可以有两个单独的对象,并SyncLock在“Group1”对象或“Group2”对象上。

但是,我会重新考虑您的设计。您可能需要考虑使用一个或多个ConcurrentQueue(Of T)集合来保存您的数据。这将可能让多个线程在不使用锁的情况下访问数据,同时保持线程安全。

于 2012-01-27T21:44:53.000 回答
0

您可以将对象分成组,每个组都用单独的锁保护。这称为锁条带化。

如果您一次需要访问多个锁,则需要始终以相同的顺序获取它们,否则您将遇到死锁。

于 2012-01-27T21:48:19.100 回答