There is the possibility while your threads are most likely select() idling, they could be waiting for a single on a pipe. Such that you pipe a flag the thread to wait for an unlock flag.
If you're trying to prevent multiple threads from accessing a shared system of data in the RAM. I would suggest that you make but just 1 function to access the shared information, and either pthread_mutex_(lock/unlock) it, or pthread_rwlock_(rd/wr/un)lock. Such a thing will cause all the calling threads to queue under the system until the current locking call frees that space. -WARNING- If you use mutex, make sure you unlock the function before you return, or else you may 'deadlock' your threads.
http://www.mkssoftware.com/docs/man3...tex_lock.3.asp