Simple POSIX threads question

Posted by Andy on Stack Overflow See other posts from Stack Overflow or by Andy
Published on 2010-05-14T13:50:27Z Indexed on 2010/05/14 13:54 UTC
Read the original article Hit count: 239

Filed under:
|
|
|

Hi,

I have this POSIX thread:

void subthread(void)
{
  while(!quit_thread) {

     // do something
     ...

     // don't waste cpu cycles
     if(!quit_thread) usleep(500);
  }

  // free resources
  ...

  // tell main thread we're done
  quit_thread = FALSE;
}

Now I want to terminate subthread() from my main thread. I've tried the following:

quit_thread = TRUE;

// wait until subthread() has cleaned its resources
while(quit_thread);

But it does not work! The while() clause does never exit although my subthread clearly sets quit_thread to FALSE after having freed its resources!

If I modify my shutdown code like this:

quit_thread = TRUE;

// wait until subthread() has cleaned its resources
while(quit_thread) usleep(10);

Then everything is working fine! Could someone explain to me why the first solution does not work and why the version with usleep(10) suddenly works? I know that this is not a pretty solution. I could use semaphores/signals for this but I'd like to learn something about multithreading, so I'd like to know why my first solution doesn't work.

Thanks!

© Stack Overflow or respective owner

Related posts about posix

Related posts about linux