Click here to Skip to main content
11,478,902 members (72,012 online)
Rate this: bad
Please Sign up or sign in to vote.
See more: C#3.5 Threading
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 19-Aug-10 0:28am
Edited 19-Aug-10 0:31am

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 at 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 at 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
0 Sergey Alexandrovich Kryukov 200
1 F-ES Sitecore 195
2 Frankie-C 120
3 OriginalGriff 105
4 DamithSL 95
0 Sergey Alexandrovich Kryukov 7,880
1 OriginalGriff 7,341
2 Sascha Lefèvre 3,064
3 Maciej Los 2,491
4 Richard Deeming 2,335

Advertise | Privacy | Mobile
Web04 | 2.8.150520.1 | Last Updated 19 Aug 2010
Copyright © CodeProject, 1999-2015
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