This is not an insurmountable problem, using pthread_kill() to signal a thread with data. AFAIK, using sigqueue() is not thread safe. It should only be handled in the main thread of the program. However, you can create an associative array of structures that associate a thread id with the data you wish to communicate. Then, the thread's signal handler can look at the associated with its tid and act accordingly. FWIW, you could try to use the thread id in place of a process id for sigqueue(). I don't know if that would work, and it might in some systems, but not in others. Caveat programmer! :-)