2010-12-04 11 views
10

Duplicar posible:
stdout thread-safe in C on Linux?¿Es seguro utilizar threadf en hilos que se ejecutan simultáneamente?

Say Thread1 y thread2 son similares y al final de sus trabajos Ambos printf. ¿Es seguro para subprocesos o tienen que bloquear printf de alguna manera?

¿Está relacionado con stdout? ¿Qué pasa si uno realiza fflush (stdout) después de cada printf? ¿Cambia algo?

+1

Consulte http://stackoverflow.com/questions/467938/stdout-thread-safe-in-c-on-linux – icecrime

Respuesta

11

El POSIX.1 y funciones del lenguaje C que operan en el carácter arroyos (representados por punteros a objetos de tipo de archivo) son requeridos por POSIX.1c a ser implementado de una manera tal que reentrada se logra (ver ISO/IEC 9945: 1-1996, §8.2).

se refieren a Thread-safety and POSIX.1

Nota: Algunas funciones pueden ser de reentrada o no reentrante, dependiendo de sus argumentos.

+8

Estas funciones son * no * reentrantes. Son seguros para subprocesos. Hay una gran diferencia. Las funciones reentrantes son automáticamente seguras para subprocesos, pero las funciones seguras para subprocesos pueden bloquearse (o empeorarse) si se vuelven a llamar desde el mismo subproceso en el que ya están ejecutándose (por ejemplo, desde un manejador de señal). –

+0

Aquí hay algunas referencias más: http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html y http://www.opengroup.org/onlinepubs/9699919799/functions/flockfile.html ver especialmente en el este último: "Todas las funciones que hacen referencia a objetos (' FILE * ') se comportarán como si usaran' flockfile() 'y' funlockfile() 'internamente para obtener la propiedad de estos objetos (' FILE * ')". –

+0

Posix difiere entre seguridad de hilo, reentrada y señal asíncrona segura. Las funciones FILE * no son seguras para señal asíncrona. – nos

Cuestiones relacionadas