- Posted by Admin on May 13, 2009
Sometimes, we may need to act on some information(object) which is critical for the application and we need to make sure that the information contained by that object is consistent. The way to keep the information in the object consistent is to avoid the access of that object by more than one thread or program. In short, we need to achieve mutual exclusion for that object for predefined number of statements or block of code. C# offers this by several ways such as lock, mutex and semaphores. lock statement is the easiest way to lock the object and the related statements.
The basic syntax is below.
Object thisLock = new Object();
lock (thisLock)
{
// Critical code section
}
Suppose you act upon one DataTable object and you do not want to alter the content of it by more than one threads then option available is to lock that datatable object.
DataTable dt = DatabaseOperations.GetDataTable(SQL);
lock(dt)
{
// critical statements to alter the contents inside dt
}
In short, lock enables us to achieve the mutually exclusive access to the locked object such that, when it is locked, no other thread can access that locked object until its lock is released. The thread that attempts to gain the access of the locked object gets to the SUPENDED state until the lock is removed.
Examples
lock(this) - locks the current instance of the object in which the statemens are being executed.
lock(typeof(ClassName)) - locks the static members of the class ClassName