Я использую как API-интерфейсы Linux, так и Win32. В моей программе несколько потоков совместно используют дескриптор сокета. В частности, несколько потоков обращаются к send
с общим дескриптором сокета (т.е. С тем же портом). В этом случае мне нужно установить блокировку для безопасности потоков? Я не смог найти ответ. Я могу сделать тест, но хочу услышать ваши впечатления.
РЕДАКТИРОВАТЬ. Я знаю, что такая отправка данных через сокет вовсе не является атомарной. Определенно нам нужно использовать мьютекс для обеспечения безопасности потоков. Однако мне было интересно, может ли системный API иметь собственный внутренний замок. Если это так, мы можем опустить собственный замок.
Этот вопрос может быть применим и к функции fprintf
. Мне интересно, что такие системные API будут иметь свои собственные блокировки. По моему опыту, вызов fprintf
из нескольких потоков не убивал мою программу, хотя в файле или stdout были расы (т.е. Непоследовательные или непредсказуемые выходы, но программа не была разбита), что подразумевало, что fprintf
имел блокировку для защиты их внутренней структуры данных.