Estoy usando las API de socket de Linux y Win32. En mi programa, varios subprocesos comparten un identificador de socket. En particular, varios subprocesos llaman al send
con el identificador de socket compartido (es decir, el mismo puerto). En este caso, ¿tengo que poner un candado para la seguridad del hilo? No pude encontrar la respuesta. Puedo hacer una prueba, pero quiero escuchar sus experiencias.C socket API es seguro para subprocesos?
EDIT: Sé que el envío de datos a través de socket no es operación atómica en absoluto. Definitivamente tenemos que usar un mutex para seguridad de hilo. Sin embargo, me preguntaba si la API del sistema podría tener su propio bloqueo interno. Si es así, podemos omitir poner nuestro propio candado.
Esta pregunta también puede aplicarse a la función fprintf
. Me pregunto si las API del sistema tendrían sus propios bloqueos. En mi experiencia, llamar al fprintf
desde varios subprocesos no mató mi programa aunque hubo carreras en un archivo o stdout (es decir, salidas inconsistentes o impredecibles, pero el programa no se bloqueó), lo que implicaba fprintf
tenía un bloqueo para proteger su interno estructura de datos.
Múltiples hilos de lectura y escritura en el mismo socket es, en mi opinión, un problema de diseño de facto. – theMayer