Click here to Skip to main content
11,921,479 members (64,626 online)
Rate this:
Please Sign up or sign in to vote.
See more: C#3.5 threads
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 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
0 OriginalGriff 553
1 Dave Kreskowiak 245
2 phil.o 160
3 KrunalRohit 134
4 Sergey Alexandrovich Kryukov 132
0 OriginalGriff 6,951
1 KrunalRohit 4,530
2 Sergey Alexandrovich Kryukov 3,171
3 George Jonsson 2,840
4 Suvendu Shekhar Giri 2,181

Advertise | Privacy | Mobile
Web01 | 2.8.151120.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