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

425
Vistas
¿Qué sucede con las claves generadas por pthread_key_create() después de una bifurcación de proceso?

De la página de manual de pthread_key_create FreeBSD: /comentario

... La función pthread_key_create() crea una clave de datos específica del subproceso visible para todos los subprocesos en el proceso. Los valores clave proporcionados por pthread_key_create() son objetos opacos que se utilizan para ubicar datos específicos del subproceso. Aunque diferentes subprocesos pueden usar el mismo valor de clave, los valores vinculados a la clave por pthread_setspecific() se mantienen por subproceso y persisten durante la vida del subproceso que llama.

Supongo que las instancias de pthread_key_t producidas están vinculadas a un proceso (de ahí la palabra opaca en la página del manual), y que se vuelven inválidas después de un fork() . Sin embargo, no pude encontrar ninguna referencia en las páginas de manual existentes o en la documentación.

¿Alguien puede confirmar/comentar?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Supongo que las instancias pthread_key_t producidas están vinculadas a un proceso

Hay muchas razones para pensar que las instancias son específicas del proceso, en el sentido de que si, por ejemplo, registra la representación de una clave en la memoria compartida, entonces no tiene sentido para los procesos no relacionados que asignan el mismo segmento de memoria compartida.

(de ahí la palabra opaca en la página del manual),

Pero "opaco" no tiene nada que ver en particular con eso. Simplemente significa que no hay piezas reparables por el usuario en el interior. Estás destinado a usarlo solo como un todo.

y que estos se vuelven inválidos después de un fork().

Eso parece un poco de un salto. No esperaría eso en absoluto. fork() crea un duplicado casi exacto del proceso de llamada, sujeto a algunas excepciones enumeradas explícitamente, que se enumeran en el manual . Probablemente el más relevante es que el nuevo proceso contiene solo un hilo (el que llamó fork() ). La invalidación de las claves de datos específicos del subproceso no está en la lista, ni tampoco la pérdida de datos específicos del subproceso del subproceso inicial del hijo.

Sin embargo, no pude encontrar ninguna referencia en las páginas de manual existentes o en la documentación.

Exacto así.

SIN EMBARGO , los programas de subprocesos múltiples generalmente no deben bifurcarse, ya que existe un alto riesgo de que el proceso secundario quede en un estado no válido, como con mutexes que están bloqueados por subprocesos que no existen en el proceso secundario. Hay algunos casos especiales, como bifurcar a un niño que exec inmediatamente s, pero en la mayoría de los casos, no debe intentar mezclar subprocesos múltiples con multiprocesamiento.

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