Monday, April 3, 2017

Digest for comp.programming.threads@googlegroups.com - 3 updates in 1 topic

Ramine <toto1@toto1.net>: Apr 02 05:13PM -0400

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 <toto1@toto1.net>: Apr 02 05:31PM -0400

On 4/2/2017 5:13 PM, Ramine wrote:
> 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.
 
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.
 
 
Thank you,
Amine Moulay Ramdane.
Ramine <toto1@toto1.net>: Apr 02 06:09PM -0400

On 4/2/2017 5:31 PM, Ramine wrote:
 
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.
 
 
Thank you,
Amine Moulay Ramdane.
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page.
To unsubscribe from this group and stop receiving emails from it send an email to comp.programming.threads+unsubscribe@googlegroups.com.

No comments: