Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming.threads > #190

Re: cond signal wait

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

Show all headers | View raw


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


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