星期一 十二月 21, 2009 09:42
cSharp中同步类的设计
尽量的避免问题,我们最好不要在线程之间共享数据。如果要共享数据,就必须使用同步技术:确保一次只有一个线程访问和改变共享数据。其中不可避免的要用到“锁”。使用锁是需要时间的,并且,也不是总是必须的。所以对于一个类,我们可以创建一个类的2个版本,一个同步版本,一个异步版本。下面请看这个例子:
public class SynDemo
{
public virtual bool IsSynchronized
{
get { return false; }
}
public virtual void doThis()
{
//dothis
}
public virtual void doThat()
{
//doThat
}
public static SynDemo SynchronizeDemo(SynDemo d)
{
if (!d.IsSynchronized)
{
return new SynchronizedDemo(d);
}
return d;
}
private class SynchronizedDemo : SynDemo
{
private SynDemo _demo;
private object _synRoot =new object();
public SynchronizedDemo(SynDemo d)
{
this._demo = d;
}
public override bool IsSynchronized
{
get
{
return true;
}
}
public override void doThat()
{
lock(_synRoot)
{
_demo.doThat();
}
}
public override void doThis()
{
lock(_synRoot)
{
_demo.doThis();
}
}
}
}
- Category: csharp-note
- No Comments