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

402
Views
atomic_init no es seguro para subprocesos en C, entonces, ¿por qué existe?

El estándar C17, sección 7.17.2.2, establece lo siguiente con respecto a void atomic_init(volatile A *obj, C value) definido en <stdatomic.h> :

Aunque esta función inicializa un objeto atómico, no evita carreras de datos; el acceso simultáneo a la variable que se está inicializando, incluso a través de una operación atómica, constituye una carrera de datos.

Dado que el objetivo de tener objetos atómicos y operaciones atómicas es evitar carreras de datos, ¿por qué existe la función atomic_init ? Por ejemplo, ¿por qué no hacer lo siguiente?

 _Atomic int x = 7;

En vez de:

 _Atomic int x; atomic_init(&x, 7);

Además, ¿por qué se llama atomic_init cuando en realidad es una asignación?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Los valores Atomic pueden tener campos ocultos que se usan para lograr la semántica deseada, y esos deben inicializarse de alguna manera. Esto se puede lograr usando un inicializador de variable C o usando atomic_init .

Para una variable estática o automática, eso proporciona dos opciones:

 _Atomic int x = 7;
 _Atomic int x; atomic_init( &x, 7 );

Pero eso solo deja una opción para las variables asignadas dinámicamente.

 _Atomic int *p = malloc( sizeof( _Atomic int ) ); atomic_init( p, 7 );
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!