
15 Statements
15.12 The lock statement
Paragraph 11 The lock statement obtains the mutual-exclusion lock for a given object, executes a statement, and then releases the lock. lock-statement : lock ( expression ) embedded-statement
Paragraph 21 The expression of a lock statement must denote a value of a reference-type. 2 No implicit boxing conversion (§13.1.5) is ever performed for the expression of a lock statement, and thus it is a compile-time error for the expression to denote a value of a value-type.
Paragraph 31 A lock statement of the form lock (x) ...where x is an expression of a reference-type, is precisely equivalent to
System.Threading.Monitor.Enter(x);
try {
...
}
finally {
System.Threading.Monitor.Exit(x);
}
except that x is only evaluated once. [Example: The System.Type object of a class can conveniently be used as the mutual-exclusion lock for static methods of the class. For example:
class Cache
{
public static void Add(object x) {
lock (typeof(Cache)) {
...
}
}
public static void Remove(object x) {
lock (typeof(Cache)) {
...
}
}
}
end example]
| |
| Jagger Software Ltd | |
| Company # 4070126 | |
| VAT # 762 5213 42 |