Никакой блокировки не нужно. Системные вызовы типа write/read/send/recv гарантируют свою атомарность. Но тем не менее тогда тебе придется за раз записывать логически завершенное сообщение в сокет, иначе тот кто будет читать может прочитаь кашу: пол сообщения от одного потока, пол от другого. Например "I'm 0x123 I'm 0x343 thread.thread."