Click here to Skip to main content
13,090,178 members (52,382 online)
Rate this:
Please Sign up or sign in to 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 18-Aug-10 23:28pm
Updated 18-Aug-10 23:31pm

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

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,
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)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web03 | 2.8.170813.1 | Last Updated 19 Aug 2010
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100