读书人

求教lock的有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

求教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里自己剥离出来

读书人网 >C#

热点推荐