Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: <<<-Basura->>> en 25 Febrero 2013, 16:19 PM

Título: Hilos C
Publicado por: <<<-Basura->>> en 25 Febrero 2013, 16:19 PM
Hola estoy tratando de comunicar variables entre hilos pero no tengo mucha idea de como es... he intentado distintas formas pero no logro nada. como puedo hacerlo!!, tengo un pequeño ejemplo de lo que quiero hacer:


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>


int main(){
int a = 10;
int *b = &a;
   pid_t pid = fork();


   if (pid == 0) {
       //Child process
       printf("*B1: %d\n",a);
       *b = 20; // deberia actualizar el valor de "a"
   }
   else {
       //Parent Process
       sleep(2);
       printf("*B2: %d\n",*b); // imprime el antiguo valor de "a"
    }
    sleep(1);
    return 0;
}

Título: Re: Hilos C++
Publicado por: 0xDani en 25 Febrero 2013, 16:35 PM
1) Eso es C.
2) Estas usando procesos, no hilos.
Título: Re: Hilos C
Publicado por: <<<-Basura->>> en 25 Febrero 2013, 16:38 PM
No tienes algún ejemplo sencillo, es que en internet hay muchos pero complejos.
Título: Re: Hilos C
Publicado por: 0xDani en 25 Febrero 2013, 16:49 PM
Pues no he trabajado mucho con procesos la verdad, busca con el buscador del foro.
Título: Re: Hilos C
Publicado por: <<<-Basura->>> en 25 Febrero 2013, 17:34 PM
Y de hilos no tienes algún ejemplo.
Título: Re: Hilos C
Publicado por: rir3760 en 25 Febrero 2013, 17:44 PM
Una introducción( buena pero en ingles) al tema de hilos y procesos es "Advanced Linux Programming". Puedes descargarla en formato PDF, solo es cuestión de buscarla en la red.

Un saludo
Título: Re: Hilos C
Publicado por: naderST en 25 Febrero 2013, 18:08 PM
Cita de: <<<-Underwar->>> en 25 Febrero 2013, 16:19 PM
Hola estoy tratando de comunicar variables entre hilos pero no tengo mucha idea de como es... he intentado distintas formas pero no logro nada. como puedo hacerlo!!, tengo un pequeño ejemplo de lo que quiero hacer:


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>


int main(){
int a = 10;
int *b = &a;
   pid_t pid = fork();


   if (pid == 0) {
       //Child process
       printf("*B1: %d\n",a);
       *b = 20; // deberia actualizar el valor de "a"
   }
   else {
       //Parent Process
       sleep(2);
       printf("*B2: %d\n",*b); // imprime el antiguo valor de "a"
    }
    sleep(1);
    return 0;
}



La llamada a fork() crea un proceso hijo duplicando el código del padre solo que en  el ámbito del hijo fork() retorna 0 y en el del padre retorna el pid o -1 en caso de error.

Una vez duplicado el proceso sus variables son independientes ya que no comparten memoria.

Puedes comunicar los procesos a través de tuberías (pipes), creas la tubería antes de llamar a fork y el proceso hijo "hereda" los descriptores de archivos.
Título: Re: Hilos C
Publicado por: x64core en 25 Febrero 2013, 19:35 PM
Busca sobre IPC ( por lo que veo linux ).
Título: Re: Hilos C
Publicado por: durasno en 25 Febrero 2013, 23:13 PM
CitarAdvanced Linux Programming
lei mal o es GPL?? que buena info :), no conocia este libro... Underwar si no te llevas muy bien con el ingles(como yo), te recomiendo este libro donde explican bastante bien el tema de IPC: "Programacion en Linux Kurt Wall"


Saludos
Título: Re: Hilos C
Publicado por: 0xDani en 26 Febrero 2013, 15:58 PM
Cita de: <<<-Underwar->>> en 25 Febrero 2013, 17:34 PM
Y de hilos no tienes algún ejemplo.

Este flooder que hice yo  ;) : http://foro.elhacker.net/empty-t374640.0.html
Título: Re: Hilos C
Publicado por: <<<-Basura->>> en 27 Febrero 2013, 17:53 PM
ya logre hacer lo que quería