Hi all
As the long subject indicates, but I'll elaborate the situation:
I have three pthreads reader/worker/writer. the reader and the writer are of the same priority and SCHED_FIFO policy while the worker has a lower priority and a SCHED_RR policy.
The reader is continuously calling select on multiple fds to read from, when data available it reads and puts them in a reader/worker queue. worker works then puts the result in a worker/writer queue. writer writes the result to some fds.
this program causes a system wide deadlock the moment it started when running on a uni-processor system. but it works perfectly (stress tested) when the three processes are of a SCHED_OTHER policy and the same priority. the synchronization mechanisms are pthread_mutex_lock/unlock and p_thread_cond_wait/signal
is there any conceptual flaw with using RT priorities with select() or with the mentioned synchronization mechanisms ? linux kernel is mainstream 2.6.24 and 2.6.29
Many thanks
Tayseer
As the long subject indicates, but I'll elaborate the situation:
I have three pthreads reader/worker/writer. the reader and the writer are of the same priority and SCHED_FIFO policy while the worker has a lower priority and a SCHED_RR policy.
The reader is continuously calling select on multiple fds to read from, when data available it reads and puts them in a reader/worker queue. worker works then puts the result in a worker/writer queue. writer writes the result to some fds.
this program causes a system wide deadlock the moment it started when running on a uni-processor system. but it works perfectly (stress tested) when the three processes are of a SCHED_OTHER policy and the same priority. the synchronization mechanisms are pthread_mutex_lock/unlock and p_thread_cond_wait/signal
is there any conceptual flaw with using RT priorities with select() or with the mentioned synchronization mechanisms ? linux kernel is mainstream 2.6.24 and 2.6.29
Many thanks
Tayseer