【发布时间】:2014-07-01 02:13:09
【问题描述】:
我有一种方法,我希望一次只有一个用户可以访问。我真的不知道该怎么做。
public static int add(int a, int b)
{
int c = a+b;
return c;
}
当用户在两个文本框中输入数据并单击 asp.net 网页上的提交按钮时,我正在调用此方法。 我不希望其他用户访问被拒绝。它们应该保存在某种队列中,当方法完成为一个用户提供服务时,应该为下一个用户提供服务。
【问题讨论】:
-
你的意思是它必须是线程安全的吗?使用您拥有的一种 .NET 同步机制,例如锁(但我们不能从这样的虚构示例中说,为什么必须这样做?您访问共享资源还是静态变量?)
-
在此上下文中定义“一个用户”...因为 ASP.NET 可能跨越多个应用程序域(在回收期间)或多台机器(服务器场) - 这需要有多严格是?同一用户可以向该方法发出多个并发 http 请求吗?这里的“用户”真的意味着“请求”吗?那么重入电话呢? 我们试图通过限制访问来保护什么?(这是问题的重要背景;没有必要对所示方法做任何事情,因为没有共享状态)
-
@Adriano 是的,我正在使用共享资源,一次可以为一个用户提供服务
-
@user3202862 试图获取锁的线程将被阻塞,直到当前拥有它的线程释放锁为止(或者更准确地说:它将被阻塞,直到它可以成功获取锁,如果还有其他竞争线程)
-
@user3202862 通常,您只需让锁完成它的工作...