Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming.threads > #190
| From | Anthony Williams <anthony.ajw@gmail.com> |
|---|---|
| Newsgroups | comp.programming.threads |
| Subject | Re: cond signal wait |
| References | <bff468ff-45d7-4e18-8ff5-95238eb94585@c1g2000yqe.googlegroups.com> <87aaebte7o.fsf@justsoftwaresolutions.co.uk> <98cd47de-73d9-48e9-ac18-cc01cac1bb48@z7g2000prh.googlegroups.com> <87lixubzfu.fsf@justsoftwaresolutions.co.uk> <a05141df-cede-4929-9e8d-4b9394fd6858@22g2000prx.googlegroups.com> |
| Date | 2011-05-25 16:53 +0100 |
| Message-ID | <87hb8ibwur.fsf@justsoftwaresolutions.co.uk> (permalink) |
| Organization | CNNTP |
p6 c6d6 <p6c6d6@gmail.com> writes:
> On May 25, 7:57 pm, Anthony Williams <anthony....@gmail.com> wrote:
>> p6 c6d6 <p6c...@gmail.com> writes:
>> > let's assume a reader writer scenario. the writer writes one byte and
>> > waits for the reader to read and signal the writer. now if the writer
>> > writes some data and does a cond signal. during this time the reader
>> > was busy doing something else or didn't get a chance to run at
>> > all. now the reader waits on condition, and the signal was already
>> > lost. both reader and writer wait forever. isn't this a valid
>> > scenario.
>>
>> Yes. However, if you hold the mutex that is associated with the cond var
>> whilst signalling, then you can avoid this: if the signalling thread has
>> the mutex then either (a) the waiting thread hasn't yet acquired the
>> mutex to check if the data is ready, or (b) the waiting thread is
>> blocked in the wait on the condvar.
void waiter()
{
lock mutex; // **A**
while(!data ready) // loop to handle spurious wake-ups
wait on condvar; // **B** releases mutex
process data;
unlock mutex; // **C**
}
void signaller()
{
lock mutex;
// if we get here, waiter() hasn't yet executed **A**
// or is blocked in **B**, so will be woken by signal
// or has executed line **C** so doesn't care about signal
mark data as ready;
signal condvar;
unlock mutex;
}
Anthony
--
Author of C++ Concurrency in Action http://www.stdthread.co.uk/book/
just::thread C++0x thread library http://www.stdthread.co.uk
Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk
15 Carrallack Mews, St Just, Cornwall, TR19 7UL, UK. Company No. 5478976
Back to comp.programming.threads | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
cond signal wait p6 c6d6 <p6c6d6@gmail.com> - 2011-05-24 18:56 -0700
Re: cond signal wait Anthony Williams <anthony.ajw@gmail.com> - 2011-05-25 08:46 +0100
Re: cond signal wait p6 c6d6 <p6c6d6@gmail.com> - 2011-05-25 05:44 -0700
Re: cond signal wait Anthony Williams <anthony.ajw@gmail.com> - 2011-05-25 15:57 +0100
Re: cond signal wait p6 c6d6 <p6c6d6@gmail.com> - 2011-05-25 08:34 -0700
Re: cond signal wait Anthony Williams <anthony.ajw@gmail.com> - 2011-05-25 16:53 +0100
Re: cond signal wait Alexander Terekhov <terekhov@web.de> - 2011-05-25 19:16 +0200
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-26 09:51 -0700
Re: cond signal wait Joshua Maurice <joshuamaurice@gmail.com> - 2011-05-26 14:48 -0700
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-26 23:20 -0700
Re: cond signal wait Joshua Maurice <joshuamaurice@gmail.com> - 2011-05-27 14:50 -0700
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-27 15:15 -0700
Re: cond signal wait Alexander Terekhov <terekhov@web.de> - 2011-05-28 15:48 +0200
Re: cond signal wait Alexander Terekhov <terekhov@web.de> - 2011-05-27 16:01 +0200
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-27 12:34 -0700
Re: cond signal wait Alexander Terekhov <terekhov@web.de> - 2011-05-28 14:24 +0200
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-29 01:33 -0700
Re: cond signal wait Alexander Terekhov <terekhov@web.de> - 2011-05-31 15:32 +0200
Re: cond signal wait David Schwartz <davids@webmaster.com> - 2011-05-31 14:07 -0700
csiph-web