值类型是不需要加锁的。因为没有线程安全问题,但是有逻辑问题。说说你的逻辑,然后再谈lock会好一点
我感觉加锁,指的是给一段代码加锁,就是设定一个临界区,在里面对临界资源进行操作。
.net里面的实现方式,如lock(object)这种简化写法,是定义了lock块为临界区。而作为参数的object在加锁/释放锁的操作中用到,而 其他线程在某一线程锁住object后 依旧可以访问object,可以调用object的方法(已测试,object被定义为static)。
所以我感觉,你要锁住某个值类型,就是在 lock块里面操作这个值类型即可。
另外,传给Enter 一个值类型,在解锁过程中会发生问题好像。
以上是我的理解,不对的化,大家指教
lock是通过对象的SyncIndexblock实现的,也就是值类型没有进程同步块,是没法给lock的。
然而这里又可以lock,这是因为对值类型lock之后会有装箱操作。但是这个装箱操作对于每个线程每次进入都有一次装箱 操作,也就是每次锁定的对象都不同,那不就是白加啦:)