Just a wild guess here…
but if the compiler let you lock on a value type, you would end up locking nothing at all… because each time you passed the value type to the lock
, you would be passing a boxed copy of it; a different boxed copy. So the locks would be as if they were entirely different objects. (since, they actually are)
Remember that when you pass a value type for a parameter of type object
, it gets boxed (wrapped) into a reference type. This makes it a brand-new object each time this happens.