gpt4 book ai didi

c# - 使用什么对象来锁定来自单个 session 的线程(来自单个连接的用户)

转载 作者:行者123 更新时间:2023-11-30 17:02:18 24 4
gpt4 key购买 nike

我想lock("on some object") 以阻止单个用户 的两个线程同时访问代码的某些部分。具有两个不同 session 的两个不同用户可以做到这一点。我正在使用 FormsAuthentication 来处理 session 。我可以使用什么样的对象来锁定?这个类 (FormsAuthentication) 是否为每个 session 提供某种类型的单例,或者您是否知道其他一些技巧来做到这一点?

我正在考虑处理一个在一组对象上隐藏字典的单例(作为不同打开 session 的一组锁)。但是在开始这种可能会使代码更难理解的复杂类之前,我是否忘记了一些最好和更简单的方法来做到这一点?

你知道一些更好的技巧来为 signle session 做那个锁吗?

最佳答案

如果您可以为要阻止的单个 session 创建一个唯一的字符串,您可以使用 Named Mutex .

创建互斥锁后,线程可以调用 WaitOne() 来获取互斥锁(从而阻止随后调用“WaitOne()”的任何其他线程)。

然后该线程可以调用 ReleaseMutex() 释放它并允许另一个在 WaitOne() 中等待的线程继续。

控制台应用程序的一些示例代码:

string mutexName = "Some name unique to the session";

bool created;
Console.WriteLine("Press RETURN to create mutex.");
Console.ReadLine();

using (var mutex = new Mutex(initiallyOwned:false, name:mutexName, createdNew: out created))
{
Console.WriteLine("Attempting to enter mutex");
mutex.WaitOne();
Console.WriteLine("Got mutex. Press RETURN to release.");
Console.ReadLine();
mutex.ReleaseMutex();
Console.WriteLine("Released mutex. Press RETURN to exit.");
Console.ReadLine();
}

请注意,这也适用于跨进程。它确实用完了操作系统事件句柄,因此如果您有数百个 session ,它可能会过大。正如 Marc 在下面指出的那样,它还假设 "sticky" load balancing .

关于c# - 使用什么对象来锁定来自单个 session 的线程(来自单个连接的用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20048552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com