无法锁定值类型使用LOCK C#

sud*_*hir 2 c# multithreading task-parallel-library c#-4.0

为什么我们不能在Lock C#中使用值类型.我找到了一些原因,但它看起来并不那么便宜:

"请记住,当你为一个object类型的参数传递一个值类型时,它会被盒装(包装)成一个引用类型.这使它每次发生时都是一个全新的对象."

"您无法锁定值类型,因为它没有同步根记录."

Mar*_*ell 5

原始值类型无处存储有关锁的所需信息.一个int(Int32),例如,为4个字节的数据,没有别的.一个对象,在另一方面,具有相关联的几个头字节,其中一个锁原始需要时可以懒惰地存储(在第一时间的特定对象被锁定).确实,所有的值类型都可以视为对象(通过装箱),但是这将是无用的,因为每次调用lock都会分别进行封装,所以你永远不会与同一个对象交谈 - 它无法实现预期的结果.

顺便说一句,我个人认为让你锁定任意对象是错误的.Monitor作为实例类型似乎更明显和直接,因此您只能锁定特定类型.那么这个问题就没有实际意义了.