Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

About C++ and real-time OSs

49 views
Skip to first unread message

Ramine

unread,
Apr 2, 2017, 5:12:44 PM4/2/17
to
Hello,


I have been working on a queue with a condition variable, but
i have noticed that a condition variable does not work
correctly, because the threads must be waiting to be able
to be signaled, if they are not waiting the signal will be lost,
so the way that many are using a condition variable with
a FIFO queue is not correct, they are for example using
this logic on the consumer side:

while(the_queue.empty())
{
the_condition_variable.wait(lock);
}


and this is not correct, because if the_queue_empty() is true ,
and the last producer thread signals before the consumer
thread is waiting for the condition variable , so this will deadlock,
so i have avoided condition variables and i have designed and
implemented an efficient real-time and thread-safe and bounded FIFO
Queue and Stack an i am actually finishing them and they are working
well, and i will soon posted them on internet.



Thank you,
Amine Moulay Ramdane.









Ramine

unread,
Apr 2, 2017, 5:31:33 PM4/2/17
to
To solve this problem with a condition variable , of course
the signaling of the condition variable must be inside the
critical section of the producers.

But there is still a problem, it is a problem with the latency
in real-time systems, if you use only one pthreads mutex
for the producer side and the consumer side , the latency will get much
bigger, because the consumers have to wait for the producers in a FIFO
priority manner, so you have to wrap the producer side inside another
pthreads mutex to lower the latency for the condition variable
case, or you have to use smartly a pthreads semaphore.

Ramine

unread,
Apr 2, 2017, 6:09:18 PM4/2/17
to
The problem with the latency on real-time systems, can be
solved with the condition variable by using two pthreads mutexes,
one for the consumer side, and one for the producer side,
not just one as is using many.

Chris M. Thomasson

unread,
Apr 2, 2017, 8:56:46 PM4/2/17
to
On 4/2/2017 2:31 PM, Ramine wrote:
> On 4/2/2017 5:12 PM, Ramine wrote:
>> Hello,
>>
>>
>> I have been working on a queue with a condition variable, but
>> i have noticed that a condition variable does not work
>> correctly, because the threads must be waiting to be able
>> to be signaled, if they are not waiting the signal will be lost,
>> so the way that many are using a condition variable with
>> a FIFO queue is not correct, they are for example using
>> this logic on the consumer side:
>>
>> while(the_queue.empty())
>> {
>> the_condition_variable.wait(lock);
>> }
>>
>>
>> and this is not correct, because if the_queue_empty() is true ,
>> and the last producer thread signals before the consumer
>> thread is waiting for the condition variable , so this will deadlock,
>> so i have avoided condition variables and i have designed and
>> implemented an efficient real-time and thread-safe and bounded FIFO
>> Queue and Stack an i am actually finishing them and they are working
>> well, and i will soon posted them on internet.
>>
>>
>>
>> Thank you,
>> Amine Moulay Ramdane.
>>
>
>
>
> To solve this problem with a condition variable , of course
> the signaling of the condition variable must be inside the
> critical section of the producers.

Not true. And why would you use a condvar in a real time system anyway?
Try to go with wait-free all the way. ;^)

Bonita Montero

unread,
Apr 4, 2017, 1:53:31 PM4/4/17
to
You don't even understand condition-variables.

--
http://facebook.com/bonita.montero/

Chris M. Thomasson

unread,
Apr 5, 2017, 4:48:01 PM4/5/17
to
On 4/4/2017 10:53 AM, Bonita Montero wrote:
> You don't even understand condition-variables.
>

Sure seems that way. Imho, One needs to learn how to efficiently work
with mutex/condvar relationship before they even think about using
anything else! Wow!

Just Wow. ;^o
0 new messages