Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
Hache
Nivel 8



Registrado: 13 May 2010
Mensajes: 574

Carrera: Informática
argentina.gif
MensajePublicado: Vie Oct 11, 2013 7:55 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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.

_________________
Nosotros... Chat FIUBA!

   OfflineGalería Personal de HacheVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Uciel
Nivel 6


Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Vie Oct 11, 2013 9:19 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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++;
}

????


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Pablisho
Nivel 5



Registrado: 25 Sep 2008
Mensajes: 142

Carrera: Electrónica y Informática
blank.gif
MensajePublicado: Vie Oct 11, 2013 9:33 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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


   OcultoGalería Personal de PablishoVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Vie Oct 11, 2013 11:48 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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!


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

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 CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.4017s ][ Pedidos: 20 (0.3316s) ]