Solved

lock on bool when access via multiple threads

Posted on 2008-10-30
3
350 Views
Last Modified: 2013-12-14
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
Comment
Question by:schneiderit
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 22848298
>>>> 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
 
LVL 39

Accepted Solution

by:
itsmeandnobodyelse earned 125 total points
ID: 22848342
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
 

Author Closing Comment

by:schneiderit
ID: 31511591
that's great, thankyou.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand columnThat will then direct you to their download page.From that page s…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question