Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

468
Vistas
¿Por qué sem_open funciona con fork() sin memoria compartida?

Este programa funciona (lo probé), aunque el semáforo no está en la memoria compartida. Tenga en cuenta cómo creo la variable una vez, antes de la bifurcación ().

Por otro lado, un semáforo creado con sem_init() necesita estar en memoria compartida para funcionar. Pero sigue siendo una estructura sem_t , entonces, ¿por qué no requiere memoria compartida?

¿Son los contenidos de la estructura sem_t de alguna manera diferentes?

 sem_t *s = sem_open("mysemaphore1", O_CREAT, 0600, 0); if (fork()) { sleep(3); sem_post(s); } else { sem_wait(s); printf("Woke\n"); }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El semáforo creado por sem_open() es un semáforo con nombre. El propósito básico del semáforo con nombre es que se use entre procesos no relacionados. El semáforo creado por sem_init() es un semáforo sin nombre. Es más liviano que el semáforo mencionado y debe colocarse en la memoria compartida si se usa entre procesos relacionados. Si se usa entre subprocesos del mismo proceso, se puede mantener en una variable global.

El puntero devuelto por sem_open() es en realidad un puntero a una memoria mapeada por mmap() con el indicador MAP_SHARED establecido. Dado que este tipo de memoria persiste en fork() , puede usar la misma variable tanto en el padre como en el hijo para acceder al semáforo nombrado.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda