Solved

lock on bool when access via multiple threads

Posted on 2008-10-30
3
337 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
  • 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
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 use and create new code templates in NetBeans IDE 8.0 for Windows.

895 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now