Pregunta

Tengo una variable de conteo que debería contarse mediante unos pocos procesos que bifurqué y usé / leí por el proceso madre.

Traté de crear un puntero en mi función main () del proceso madre y contar ese puntero en los niños bifurcados. ¡Eso no funciona! Cada niño parece tener su propia copia a pesar de que la dirección es la misma en todos los procesos.

¿Cuál es la mejor manera de hacer eso?

¿Fue útil?

Solución

Cada elemento secundario obtiene su propia copia de la memoria de procesos principal (al menos tan pronto como intenta modificar algo). Si necesita compartir entre procesos, debe mirar la memoria compartida o algún mecanismo similar de IPC.

Por cierto, ¿por qué estás haciendo esto un wiki de la comunidad? Puedes limitar las respuestas al hacerlo.

Otros consejos

2 procesos no pueden compartir la misma memoria. Es cierto que un proceso secundario bifurcado compartirá la misma memoria subyacente después de la bifurcación, pero un intento de escribir en esto provocaría que el sistema operativo asigne un nuevo espacio de escritura para él en otro lugar.

Busque otra forma de IPC para usar.

Mi experiencia es que si desea compartir información entre al menos dos procesos, casi nunca quiere compartir solo un puntero vacío * en la memoria. Es posible que desee echar un vistazo a

Interproceso de refuerzo

que puede darle una idea, cómo compartir datos estructurados (leer "clases" y "estructuras") entre procesos.

No, use IPC o hilos. Solo se comparten los descriptores de archivo (pero no el puntero de búsqueda).

Es posible que desee comprobar la memoria compartida.

los punteros son siempre mentiras en el mismo proceso. Es privado para el proceso, en relación con la dirección base del proceso. Existen diferentes tipos de mecanismos IPC disponibles en cualquier sistema operativo. Puede optar por la mensajería de Windows, la memoria compartida, el zócalo, las tuberías, etc. Elija uno de acuerdo con sus requisitos y el tamaño de los datos. Otro mecanismo es escribir datos en el proceso de destino utilizando las API de memoria virtual disponibles y notificar el proceso con el puntero correspondiente.

Una opción simple pero limitada de IPC que funcionaría bien para un recuento compartido es un 'segmento de datos compartidos'. En Windows, esto se implementa utilizando la directiva #pragma data_seg .

Consulte este artículo para ver un ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top