Hi - I have a program that seems to be getting deadlocked, where the
scheduler isn't allowing other threads to run.
Basically, I pre thread 8 threads (we'll call these process A), which all
block (calling recvfrom) on socket A. I also spawn another single thread
(process B), that blocks (using select) on socket B. If no data comes in
on socket A (i.e. process A does not ever get woken up), then process B can
receive data/process data from socket B no problem.
However, once data comes in on socket A, and one of the eight threads in
the pool gets picked to process this data, everything in the entire program
stops *until* all 8 threads have processed something. So, it's like either
0 or 8 (all) threads in process A have to have been scheduled in for the
rest of the program to run. Once all 8 threads process something, then
execution of the program resumes as normal.
Is there something special about multiple threads blocking on a single I/O
request (i.e. the same socket)? How can I find out more information about
why the rest of the threads are not getting scheduled to run?
Also, I did configure pth with the --enable-syscall-soft option, as well as
the --enable-pthread option. I've gone so far as to put a #define _select
__pthread_select (and recvfrom) directly into the top of the source file.
Any suggestions?
Thanks,
Dave
______________________________________________________________________
GNU Portable Threads (Pth) http://www.gnu.org/software/pth/
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager (Majordomo) [EMAIL PROTECTED]