关于List 的线程安全(道者有分),不知小弟这样写是否可以。。。请大家多指教
/*1.定义一个书本类*/
public class TBook{
public string BookNo="";
public string BookName="";
public string BookPictureURL="";//书本封面图url
// ....
}
/*2.书本链表*/
public class TBookList : List<TBook>{
//提供线程线程安全方案:Lock、UnLock
public void Lock()
{
Monitor.Enter(this);
}
public void Unlock()
{
Monitor.Exit(this);
}//end of //提供线程线程安全方案:Lock、UnLock
//使用线程安全添加书本,不知这样是否可以
public void AddBook(TBook b)
{
this.Lock();//加锁,这样能否确保线程安全?
try
{
Add(b);
}
finally { this.Unlock(); }
}
//通过编号获取书本信息
public TBook NoOfBook(string aBookNo){
TBook b= new TBook();
this.Lock();//加锁,不知这样使用能否确保线程安全???
try{
for(int iLoop=0; iLoop<this.Count; iLoop++){
b=this[iLoop];
if (b.BookNo==aBookNo) return b;
}
}finall{this.UnLock(); /*解锁*/ }
return b; //返加没有编号的TBook,表示NoOfBook失败
}
}
//向想大家请教下使用Monitor.Enter和Monitor.Exit,即上面的Lock和UnLock....这样能否可以确保线程安全。。。如果不行的话,有什么样的方案比较好能确保TBookList线程安全 关于List线程安全 Monitor
------解决方案--------------------
脱裤子放屁——多此一举
就正常使用就可以了,何必要自己添麻烦
lock(((ICollection)this).SyncRoot)
{
//...
}
[解决办法]
好好理解回复者的内容,你就学到技术了
[解决办法]
http://msdn.microsoft.com/zh-cn/library/c5kehkcz(v=vs.80).aspx
我还是比较推荐这种
我不知道你的是否能成功~
[解决办法]
[解决办法]
Monitor.Enter(this);
不要this 生命一个object变量好一点。
你的想法是可以达到线性安全调用的。
[解决办法]