Tag: 锁定

关于C#中的lock语句的困惑

这来自MSDN:lock关键字确保一个线程不进入代码的关键部分 ,而另一个线程在关键部分 。 关键部分是否必须与关键部分相同? 或者它是否意味着:lock关键字确保一个线程不会进入由代码对象保护的任何关键部分 ,而另一个线程处于由同一对象保护的任何关键部分 。 ? class Program { static void Main(string[] args) { TestDifferentCriticalSections(); Console.ReadLine(); } private static void TestDifferentCriticalSections() { Test lo = new Test(); Thread t1 = new Thread(() => { lo.MethodA(); }); t1.Start(); Thread t2 = new Thread(() => { lo.MethodB(); }); t2.Start(); } } public class Test { […]

C#中的跨进程锁定

我编写了一个API,将在(1)Windows服务,(2)Web应用程序和(3)Windows窗体应用程序的同一个框中使用。 他们都需要共享一小组常用数据(一些int,一个日期和一个字符串,我可以将其作为单个类的属性)。 我可以使用哪种锁定机制进行跨进程,以便三个进程可以安全地共享资源而不会遇到冲突? 请不要数据库,寻找不需要额外依赖性的解决方案。 优选地,解决方案将以某种方式使用共享存储器或文件系统。

在parallel.foreach范围之外增加计数值

如何在parallel.foreach循环范围之外增加一个整数值? 什么是同步访问并行循环外对象的最轻的方法? var count = 0; Parallel.ForEach(collection, item => { action(item); // increment count?? }

检查应用程序是否在一段时间内处于空闲状态并将其锁定

在我的项目中,我需要一个应用程序锁(与windows lock相同)。 如果应用程序空闲一段时间,应该锁定应用程序,即将显示应用程序的登录窗口。 如何在WPF C#应用程序中执行此操作?

C#手动锁定/解锁

我在C#中有一个函数,可以从多个线程多次调用,我希望它只能完成一次,所以我想到了这个: class MyClass { bool done = false; public void DoSomething() { lock(this) if(!done) { done = true; _DoSomething(); } } } 问题是_DoSomething需要很长时间,我不希望许multithreading等待它,只要他们可以看到done是真的。 这样的事情可以解决方法: class MyClass { bool done = false; public void DoSomething() { bool doIt = false; lock(this) if(!done) doIt = done = true; if(doIt) _DoSomething(); } } 但只是手动锁定和解锁会更好。 如何像lock(object)一样手动锁定和解锁? 我需要它使用相同的接口作为lock以便这种手动方式和lock将相互阻塞(对于更复杂的情况)。