Click here to Skip to main content
15,896,285 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
class ThreadSafe
{
  public static readonly object _locker = new object();
  public static int _val1;
  public int _val2 = 1;
  public void Go()
  {
    lock (_locker)
    {
      if (_val2 != 0) Console.WriteLine (_val1 / _val2);
      _val2 = 0;
    }
  }
}

In the above example is it possible for another thread to change the values of _val2 and _val1?
Posted
Updated 18-Aug-10 23:31pm
v2

1 solution

The lock keyword locks only access to the code section, not the data used inside of it. This means that it is possible for another thread to modify both _val1 and _val2 even when the locked section is executed.

Hope this helps,
Fredrik
 
Share this answer
 
Comments
piushs 19-Aug-10 6:24am    
Hi Fredrik
Thanks for your reply.
If such is the case, then how does locking satisfy the purpose of synchronisation? I mean, here i am trying to use "lock" on _locker object to avoid "division by zero" error, just in case, if two different threads are trying to access the code block and change the value of _val2 to zero.

Now if the _val2 can be modified by another thread and changed to zero, then i find above locking useless.
Please help me as i am a bit confused with locking.
CPallini 19-Aug-10 6:33am    
You should provide syncrhonized accessors to _val1, _val2, not expose them as public variables.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900