Tag: 互斥锁

C# – 锁定Mutex的问题

我有一个Web应用程序,可以控制哪些Web应用程序从我们的负载均衡器获得流量。 Web应用程序在每个服务器上运行。 它跟踪ASP.NET应用程序状态中对象中每个应用程序的“进入或退出”状态,并且只要状态发生更改,就将对象序列化为磁盘上的文件。 Web应用程序启动时,将从文件反序列化状态。 虽然网站本身只获得了几个请求,但是它很少访问的文件,我发现由于某种原因,在尝试读取或写入文件时发生冲突非常容易。 这种机制需要非常可靠,因为我们有一个自动化系统,可以定期对服务器进行滚动部署。 在任何人发表任何有关上述任何一个问题的评论之前,请允许我简单地说,解释其背后的推理会使这个post比现在更长,所以我想避免搬山。 也就是说,我用来控制文件访问的代码如下所示: internal static Mutex _lock = null; /// Executes the specified delegate on /// the filesystem copy of the . /// The work done on the file is wrapped in a lock statement to ensure there are no /// locking collisions caused by attempting to save and load […]

如何使用互斥锁

我有一个线程,即通过tcp发送存储在List 类型的缓冲区中的数据。 另一个线程是写入缓冲区。 因为我对c#不是很熟悉,所以我想知道如何正确使用锁或Mutex。 这是我最终想要使用的代码: while(buffer.isLocked()) { buffer.wait(); } buffer.lockBuffer(); buffer.add(tcpPacket); buffer.unlockBuffer(); buffer.notify(); 这是我目前的代码。 我希望有人可以帮助我完成它。 public class Buffer { private Mutex mutex; private List buffer; private bool locked = false; public Buffer() { mutex = new Mutex(false); buffer = new List(); } public bool isLocked() { return locked; } public void lockBuffer() { if (!locked) […]

使用进程间同步对象同步2个进程 – Mutex或AutoResetEvent

请考虑以下情形:我正在运行我的应用程序,在执行期间,必须运行另一个进程,并且只有在第二个进程完成内部特定初始化之后,我的第一个进程才能继续。 例如: … // Process1 code does various initializations here Process.Start(“Process2.exe”); // Wait until Process2 finishes its initialization and only then continue (Process2 doesn’t exit) … 我看到几个选项: Mutex – 在考虑进程间通信时会自动想到Mutex,但是,我看不到让Process1等待他自己生成的互斥锁的方法。 我可以使Process2创建一个互斥锁并等待Process1直到创建Mutex(使用轮询和Mutex.OpenExisting函数) AutoResetEvent – 那些对于任务来说是完美的,但是,似乎在.NET下这些不能用于进程间通信。 CreateEvent – 我可以使用P / Invoke并使用Win32 CreateEvent函数。 从理论上讲,它可以为我提供我需要的一切。 但是,如果可能的话,我宁愿不使用本机函数。 使用外部文件 – 最简单的方法就是使用一些操作系统外部对象(文件,注册表等)。 然而,这似乎相当hacky。 我很高兴听到你对这个案子的意见。 谢谢!