是否有可能根据条件建立关键区域?

时间:2013-10-26 00:33:28

标签: c# .net multithreading

我有一个网站,其中前端自动保存输入到后端的数据。这些保存可能非常接近,我想锁定每个用户的结果保存。

我不想使用简单的“锁定”,因为这会阻止所有试图保存的用户。

无论如何都要在.NET中执行此操作吗?

1 个答案:

答案 0 :(得分:4)

每个用户拥有一个锁定对象听起来很合理。我还建议你使用Monitor.TryEnter而不是lock,如果已经有一个正在保存的话,就跳过保存。像这样:

static ConcurrentDictionary<string, object> _locksByUser = new ConcurrentDictionary<string, object>();

public void Save(string userId) {
   var lock = _locksByUser.GetOrAdd(userId, new object());
   if (Monitor.TryEnter(lock)) {
       try {
       //do save here
       }
       finally {
           Monitor.Exit(lock);
       }
   }
}