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]

Reply via email to