Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

C Sharp Programming/Keywords/lock

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Keywords lock __TOC__ The lock keyword allows a section of code to exclusively use a resource, a feature useful in multi-threaded applications. If a lock to the specified object is already held when a piece of code tries to lock the object, the code's thread is blocked until the object is available. using System; using System.Threading; class LockDemo { private static int number = 0; private static object lockObject = new object(); private static void DoSomething() { while (true) { lock (lockObject) { int originalNumber = number; number += 1; Thread.Sleep((new Random()).Next(1000)); // sleep for a random amount of time number += 1; Thread.Sleep((new Random()).Next(1000)); // sleep again Console.Write("Expecting number to be " + (originalNumber + 2).ToString()); Console.WriteLine(", and it is: " + number.ToString()); // without the lock statement, the above would produce unexpected results, // since the other thread may have added 2 to the number while we were sleeping. } } } public static void Main() { Thread t = new Thread(new ThreadStart(DoSomething)); t.Start(); DoSomething(); // at this point, two instances of DoSomething are running at the same time. } } The parameter to the lock statement must be an object reference, not a value type: class LockDemo2 { private int number; private object obj = new object(); public void DoSomething() { lock (this) // ok { ... } lock (number) // not ok, number is not a reference { ... } lock (obj) // ok, obj is a reference { ... } } }