Hilos C

Iniciado por <<<-Basura->>>, 25 Febrero 2013, 16:19 PM

0 Miembros y 1 Visitante están viendo este tema.

<<<-Basura->>>

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

<<<--Basura-->>>

0xDani

1) Eso es C.
2) Estas usando procesos, no hilos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

<<<-Basura->>>

No tienes algún ejemplo sencillo, es que en internet hay muchos pero complejos.
<<<--Basura-->>>

0xDani

Pues no he trabajado mucho con procesos la verdad, busca con el buscador del foro.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

<<<-Basura->>>

Y de hilos no tienes algún ejemplo.
<<<--Basura-->>>

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

naderST

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.

x64core

Busca sobre IPC ( por lo que veo linux ).

durasno

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
Ahorrate una pregunta, lee el man

0xDani

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM