Monitors and the lock Keyword

One fundamental synchronization primitive is the concept of a monitor, as exposed through the Monitor class in System.Threading. In most cases, the use of a monitor is hidden because of the use of the lock keyword in C#, which leverages this primitive under the covers.

For our running example of a shared counter, we can make the following changes to prevent the two threads from updating the state simultaneously:

static void Main(){    object gate = new object();    int n = 0;    var up = new Thread(() =>    {        for (int i = 0; i < 1000000; i++)            lock (gate)                n++;    });    up.Start();    for (int i = 0; i < 1000000; i++)        lock (gate)            n--; ...

Get C# 5.0 Unleashed now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.