看了很多关于c#中lock使用的说明,但是感觉都没有说到点上。
最近做了一个应用,吃了一些苦头才把lock搞明白,关于lock的定义我就不多说了,这次主要说说lock在多线程中的应用及实际应用过程中遇到的问题。
多个线程访问同一个变量的时候就会用到lock,但是如何应用lock呢,lock对象需要object类型的,并且是static的,否则,多个线程会创建多个lockObject,就失去了lock的意义了(实际应用过程中没有加static,会导致计算不准确,而且还是一会准确,一会不准确,很是头疼,找不出错误的原因)。
再一个就是线程处理的过程中有多个地方用到lock的时候是用一个lockObject还是用多个,答案是多个,因为你只用一个,会影响其他有lock代码段的执行。
再一个容易出错的地方就是lock写到代码段的内部还是全局的,答案是全局的,如果写到代码段的内部,也不会报错,但是效果就是相当于没有加锁,因为各自线程还会执行代码段时创建lockObject对象再加锁,相当于只是在本线程之内使用,无意义。
有的实例用lock(this),实际上效果是一样的,相当于一个静态object对象,因为ths只有一个,而且是object型的。
如果对lock还是不太明白,推荐大家看看王涛的一本书,《你必须知道的.net》,好像是这个书名,这本书里面对lock的分析还是不错的。