Autor |
Mensaje |
Hache
Nivel 8
Registrado: 13 May 2010
Mensajes: 574
Carrera: Informática
|
|
Si. Pero no.
O sea. No podes decir que no es necesario porque lo corriste N veces y nunca te pasó nada malo. Es como probar un teorema diciendo que no encontras un contraejemplo.
Tiene de cierto (a medias) que printf no sabes como está implementado.
Según POSIX printf internamente usa fputc que a su vez bloquea por hacer uso de un FILE*.
Por lo tanto, como fputc es el que bloquea, tendrías la posibilidad de que los caracteres salgan desordenados. (La verdad que no es muy claro el tema con posix en este punto, porque uno también puede decir que printf hace un uso implícito del FILE* stdout)
Sin embargo, si haces un 'man 3 printf' vas a ver que el printf que estas usando casi seguro cumple con la especificación C99 y no con la POSIX (es el caso en linux). Por lo que el cuento puede variar (y la verdad no sé como está especificado en C99, habría que ver si la interpretación es libre o no).
En MI caso, trazando el printf con gdb resulta en una llamada write a stdout. Como stdout es bloqueante (el flag O_NONBLOCK no está puesto por default) write bloquea hasta escribir toda la información.
|
|
|
|
_________________
|
|
|
|
|
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Hola Pablisho. No me quedo muy claro a que te referis cuando decis que cambie el printf por un bucle de printf.
¿Vos decis adentro de la funcion "funcion_thr"?
O sea, en vez de escribir adentro de esa funcion algo como:
printf("%s %d\n", parametro.cadena, parametro.id);
Probar con
while(i<=5){
printf("%s %d\n", parametro.cadena, parametro.id);
i++;
}
????
|
|
|
|
|
|
|
|
|
Pablisho
Nivel 5
Registrado: 25 Sep 2008
Mensajes: 142
Carrera: Electrónica y Informática
|
|
Sí, o sea a modo de ejemplo, no tiene utilidad práctica. Sólo para que veas un ejemplo de como se mezclan las cosas con los threads si no usas un mutex, porque con un sólo printf es probable que internamente te lo bloquee por lo que te dice Hache
|
|
|
|
|
|
|
|
|
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Bueno, meti un for de 3 ciclos y sigue sin ocurrir eso de que se me deberian mezclar los mesajes....Ya estoy re mareado jajaja
Salida SIN Mutex:
Creando threads...
Threads creados. Esperando que terminen...
Hola, soy el thread numero: 9
Hola, soy el thread numero: 9
Hola, soy el thread numero: 9
Hola, soy el thread numero: 8
Hola, soy el thread numero: 8
Hola, soy el thread numero: 8
Hola, soy el thread numero: 7
Hola, soy el thread numero: 7
Hola, soy el thread numero: 7
Hola, soy el thread numero: 4
Hola, soy el thread numero: 4
Hola, soy el thread numero: 4
Hola, soy el thread numero: 3
Hola, soy el thread numero: 3
Hola, soy el thread numero: 3
Hola, soy el thread numero: 0
Hola, soy el thread numero: 0
Hola, soy el thread numero: 0
El thread 0 devolvio el valor 0
Hola, soy el thread numero: 5
Hola, soy el thread numero: 5
Hola, soy el thread numero: 5
Hola, soy el thread numero: 6
Hola, soy el thread numero: 6
Hola, soy el thread numero: 6
Hola, soy el thread numero: 2
Hola, soy el thread numero: 2
Hola, soy el thread numero: 2
Hola, soy el thread numero: 1
Hola, soy el thread numero: 1
Hola, soy el thread numero: 1
El thread 1 devolvio el valor 1
El thread 2 devolvio el valor 2
El thread 3 devolvio el valor 3
El thread 4 devolvio el valor 4
El thread 5 devolvio el valor 5
El thread 6 devolvio el valor 6
El thread 7 devolvio el valor 7
El thread 8 devolvio el valor 8
El thread 9 devolvio el valor 0
Todos los threads finalizados. Adios!
Salida CON Mutex:
Creando threads...
Threads creados. Esperando que terminen...
Hola, soy el thread numero: 9
Hola, soy el thread numero: 9
Hola, soy el thread numero: 9
Hola, soy el thread numero: 8
Hola, soy el thread numero: 8
Hola, soy el thread numero: 8
Hola, soy el thread numero: 7
Hola, soy el thread numero: 7
Hola, soy el thread numero: 7
Hola, soy el thread numero: 2
Hola, soy el thread numero: 2
Hola, soy el thread numero: 2
Hola, soy el thread numero: 1
Hola, soy el thread numero: 1
Hola, soy el thread numero: 1
Hola, soy el thread numero: 0
Hola, soy el thread numero: 0
Hola, soy el thread numero: 0
El thread 0 devolvio el valor 0
El thread 1 devolvio el valor 1
El thread 2 devolvio el valor 2
Hola, soy el thread numero: 6
Hola, soy el thread numero: 6
Hola, soy el thread numero: 6
Hola, soy el thread numero: 5
Hola, soy el thread numero: 5
Hola, soy el thread numero: 5
Hola, soy el thread numero: 4
Hola, soy el thread numero: 4
Hola, soy el thread numero: 4
Hola, soy el thread numero: 3
Hola, soy el thread numero: 3
Hola, soy el thread numero: 3
El thread 3 devolvio el valor 3
El thread 4 devolvio el valor 4
El thread 5 devolvio el valor 5
El thread 6 devolvio el valor 6
El thread 7 devolvio el valor 7
El thread 8 devolvio el valor 8
El thread 9 devolvio el valor 0
Todos los threads finalizados. Adios!
Y bueno, ni hablar de que aveces me encuentro con comportamientos erraticos del tipo:
El thread 9 devolvio el valor 0 (cuando deberia mostrarse: El thread 9 devolvio el valor 9 - cosa que aveces lo hace y otras veces no)
Es todo un asunto esto de los threads eh. Y yo que tenia pensado cursar el dia de mañana Tecnicas de Prog Concurrente!
|
|
|
|
|
|
|
|
|
|
Ir a página Anterior 1, 2
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|