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

178
Views
Bloquear un hilo con dormir vs bloquear sin dormir

Creé una aplicación de subprocesos múltiples utilizando subprocesos C++ y POSIX. En el que ahora debería bloquear un hilo (hilo principal) hasta que se establezca un indicador booleano (se vuelva verdadero).

He encontrado dos maneras de hacer esto.

  • Girando a través de un bucle sin dormir.

     while(!flag);
  • Girando a través de un bucle con el sueño.

     while(!flag){ sleep(some_int); }

Si debo seguir la primera forma, ¿por qué algunas personas escriben códigos siguiendo la segunda forma? Si se debe usar la segunda forma, ¿por qué debemos hacer que el hilo actual duerma? ¿Y cuáles son las desventajas de esta manera?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La primera opción (una "espera ocupada") desperdicia un núcleo completo durante la espera, evitando que se realice otro trabajo útil y/o desperdiciando energía.

La segunda opción es menos derrochadora: su subproceso en espera usa muy poca CPU y permite que se ejecuten otros subprocesos. Pero sigue siendo un desperdicio volver al hilo para verificar la bandera.

Mucho mejor que cualquiera de los dos sería usar una variable de condición, que permite que el subproceso en espera se bloquee sin consumir ningún recurso hasta que pueda continuar.

over 4 years ago · Santiago Trujillo Report

0

while(flag); hará que su subproceso use todo el tiempo asignado para verificar la condición. Esto desperdicia muchos ciclos de CPU comprobando algo que probablemente no ha cambiado.

Dormir un poco hace que el subproceso se detenga y ceda la CPU a los programas que realmente la necesitan.

Sin embargo, tampoco deberías hacerlo; debe usar una biblioteca de subprocesos para crear un objeto de indicador y llamar a su función de wait , de modo que el núcleo pause el subproceso hasta que se establezca el indicador.

over 4 years ago · Santiago Trujillo Report

0

La primera forma (simplemente while ) es desperdiciar recursos, específicamente el tiempo de procesador de su proceso.

Cuando un subproceso se pone en sleep , el sistema operativo puede decidir que el procesador se utilizará para diferentes tareas cuando se habla de sistemas con multitarea preventiva. En teoría, si tuviera tantos procesadores/núcleos como hilos, no tendría por qué haber ninguna diferencia.

Si una solución es buena o no, depende del sistema operativo utilizado y, a veces, de la arquitectura en la que se ejecuta el programa. Debe consultar su referencia de syscall para obtener más información al respecto.

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!