Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 361
  • Last Modified:

lock on bool when access via multiple threads

Guys,

I have two threads.  

Currently I check on a bool to determine whether one of the threads should stop work.  The bool is set from the other thread.  Do I need to lock around the bool?  I presumed I would, but collegues believe I may not have to? Another collegue mentioned setting the bool to volatile, so it's not cached?  I appreciate if anyone could suggest the correct action.

Thanks.

- Lee.

0
schneiderit
Asked:
schneiderit
  • 2
1 Solution
 
itsmeandnobodyelseCommented:
>>>> Do I need to lock around the bool?
You only need to lock if both threads were updating the bool. If only one is writing and the other is only reading, the lock is not needed.
0
 
itsmeandnobodyelseCommented:
Assume the bool is false initially.

Then both threads would see that.

If now the first thread sets the bool to true, the second may still read a false if the read operation was nearly same time (or same time at another core). But any little time later, it correctly would read the true. So, the only reason for a lock could be if the second must recognize the setting to true immediately, e. g. in case the bool is used for synchronization reasons itself. For these cases a unlocked bool is not safe, you would need  amutex, critical section or at least an atomic increment, e. g. by calling InterLockedIncrement on a shared long:

    volatile long  g_stop = 0;
    ...
     
    while (InterLockedIncrement(&g_stop) > 1)
    {
          // coming here a second thread has incremented the g_stop nearly same time
          InterLockedDecrement(&g_stop);
          Sleep(1);
    }
    // coming here it is safe now
    ....
   
    // reset the lock flag
    InterLockedDecrement(&g_stop);



0
 
schneideritAuthor Commented:
that's great, thankyou.
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now