日期:2014-05-17  浏览次数:20923 次

讨论一下lock这个问题
都做bs架构的系统,对window的东西非常缺乏。
看一编文章:http://shansun123.iteye.com/blog/517386

有一句
“. lock(this)的缺点就是在一个线程(例如本例的t1)通过执行该类的某个使用"lock(this)"的方法(例如本例的LockMe())锁定某对象之后, 导致整个对象无法被其他线程(例如本例的主线程)访问 ”
可以得出 lock(this) 会大大损耗性能。
上面那句话我以为是正确的。
请问上面总结对吗?
线程 对象

------解决方案--------------------
lock(this)就是让某一时刻只能让一个线程使用这里面的代码,待此线程使用完毕,其他等待线程才能一一使用,跟性能有什么联系?
------解决方案--------------------
lock就是为了互斥用的,如果谁都可以随意访问,lock还有啥用
------解决方案--------------------
object lockdata=null;

lock(lockdata)
{
//此处处理时间越长 其它线程等待时间就越长
}

我一般是lock索引。

不知道这样用好不好

比如
List<string> ListData=new List<string>();
object lockindex=0;

....

int tempindex=0;
lock(lockindex)
{
tempindex=Convert.ToInt32(lockindex);
lockindex=tempindex+1;
}
if(tempindex>=ListData.Count)
return;

string resstr=ListData[tempindex];


纯手打   有问题请注意下


------解决方案--------------------
关于线程的还是看看clr via C# 第三版
可以系统地学习

看过后,很少用,也忘记了~
------解决方案--------------------
我做多线程时间比较短,是从framework4开始的,所以自然用的都是 System.Collections.Concurrent命名空间下的对象,对于lock,我觉得现在的开发已经不再需要他了。
lock是为了线程安全提供的,但现在微软出了很多线程安全的对象,都可以替代它,貌似lock是framework1的时候出的把(这个不一定准)
------解决方案--------------------
引用:
经测试,上面那篇文章是正确的。

这……这不能叫“缺点”,他就是为了达到这个效果而诞生的。 
------解决方案--------------------
不奇葩 习惯了就好了