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