Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

423
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!