我试图限制对单个对象的访问,因此一次只有一个线程使用它,此外,我想防止同一个线程两次访问受限制的代码。
我尝试了 Lock 方法,我发现它并没有锁定锁定她的线程,而只是锁定其他线程..
如下:
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
public class SomeWorker
{
private readonly Timer _doWorkTimer = new Timer(20);
public SomeWorker()
{
InitiateTimer();
}
private void InitiateTimer()
{
_doWorkTimer .Elapsed += DoWorkElapse;
_doWorkTimer .Enabled = true;
}
private void DoWorkElapse(object source, ElapsedEventArgs e)
{
DoSomeWork();
}
private void DoSomeWork()
{
// I know that lock on string is wrong!
// Its just for the example only I
// Its just to make sure all the program is use the same lock..
lock ("ConnectionLock")
{
Console.WriteLine("Lock");
var inst = Singletone.Instance;
// Do Some Work on "inst" ...
Console.WriteLine("Unlock");
}
}
}
例如,控制台中的结果是:
. . .
锁
开锁
锁
锁
开锁
. . .
可以看到,2条Lock评论一个接一个显示
所以这意味着计时器线程访问了两次“DoSomeWork()”。
任何人都知道如何使这个锁工作?
其他同步方法可能吗?
谢谢。