求教lock的问题
本帖最后由 niss 于 2013-04-06 15:48:40 编辑
lock可以锁住代码段,但我需要的是像读写锁这种功能,如在写的时候锁住,不允许其他读和写,但在只有读的时候,就不需要被锁住,用lock的话在并发读的时候也会被锁住
大概如下
readonly object _obj = new object();
Dictionary<string,object> _dic = new Dictionary<string,object>();
public void Add(string key,object value)
{
lock(_obj)
{
_dic.Add(key,value);//这里是简写,不严谨
}
}
public bool ContainsKey(string key)
{
get
{
lock(_obj)
{
return _dic.ContainsKey(key);
}
{
}
public ICollection<TKey> Keys
{
get
{
lock (_locker)
{
return _dic.Keys;
}
}
}
这里我不希望在并发调用ContainsKey和Keys的时候被lock,因为它没有发生"写",该如何实现呢?
有个东西不敢确定
lock(_obj)
{
//写操作
Monitor.Pulse(_obj);
}
lock(_obj)
{
Monitor.Wait();
//读操作
}
这个可以么?
------解决方案--------------------首先这个问题跟语言的关系不大。
可以自己去查找 操作系统 读者写者 问题的相关解法。
------解决方案--------------------ReaderWriterLockSlim net 3.5以上支持,参看msdn
如果3.5以下 需自己实现 去Reflector里自己剥离出来