Hi all, I guess my question is not specific to Boost.Thread, but to threading in general (I'm new at it)... still hope you can help me out, either directly or by redirecting me to the right place (links are very much appreciated) I'm starting a multi-threaded program using Boost.Thread library: it is a "server", in which a thread loops around a "select" to accept new connections and see when a socket has data to be read, in which case puts the fds in queue from which other threads are taking them out to read the data. The problem I have, is that when a "ReceiverThread" finishes reading the data from the socket, it puts the fd back in the "all connections list", but by this time the other ("main")thread already copied the fds from the list and got into the next "select" loop, which means the socket from which the "receiver" just finished reading, will not be "selected" (monitored) untill the next select loop, which will not be untill a) a new connection comes or b)one of the other connected sockets gets some data that takes makes the main thread return from select. reading the select man, I thought I could just use a signal to force select to return when the "receiver" has put the fd back in the "all connection list": the threads are now executing something like: main_thread { *put all fds from "all sockets" list into a fdset *make a select on the fdset (block till something interesting happens) *take the fds with data out of "all sockets" and put them into "sockets with data" *loop } receiver{ *get a fd from "sockets with data" (if nothing there blocks till the main_thread sends us a fd through the queue) *read from fd *put fd back into "all sockets" (problem: main_thread may be (is!) already into the select) *raise(SIGUSR1) (to force select to return and enter the loop again, but this time with our fd) } the signal handler for SIGUSR1 does nothing, it just serves to force select to return, but the code is not really working as I expected, and I realized that the problem is that each thread has its own pid, so it seems raise is actually sending a signal to the wrong thread.... as I said, I am new to mulithreading, but I thought all threads run in a process, which means, they all have the same pid. ->if I first find out the "pid" of the main_thread and change raise(SIGUSR1) to kill(pid,SIGUSR1) it works ok. so my question: why does each thread have a own pid?? how can then I send signals from one thread to another?? I discovered there is a "pthread_kill" function to send signals to specific threads, the problem is I only have boost::thread objects, no pthread_t structures. or am I talking nonsense and shouldnt be using signals with Boost.Thread? if so, how do I solve the select problem?? thanx! luis