es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no es necesario vincular pthread a this_thread::sleep_for?

Por lo general, al compilar código relacionado con hilos en GCC, es necesario realizar una vinculación explícita con pthread:

g++ -pthread main.cxx

Sin embargo, el siguiente código se compila, vincula y se ejecuta correctamente sin necesidad de vincularlo con pthread:

“`c++
#include <iostream>
#include <thread>

using namespace std::chrono_literals;

int main() {
std::this_thread::sleep_for(1000ms);
return 0;
}
“`

Supongo que lo que está ocurriendo aquí es que std::this_thread::sleep_for está utilizando alguna función POSIX de libc (en lugar de algo de pthread). Pero, si ese es el caso, ¿la ejecución de std::this_thread::sleep_for cambia dependiendo de si se llama desde el hilo principal o no?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, en general, al compilar código relacionado con hilos (threads) en GCC, es necesario realizar una vinculación explícita con pthread. Sin embargo, en el fragmento de código dado, std::this_thread::sleep_for es una biblioteca estándar de C++11 que se implementa utilizando funciones dependientes de la plataforma. En el caso de Linux, se implementa utilizando nanosleep, que es una función POSIX proveniente de libc. Por lo tanto, la llamada a sleep_for no requiere una vinculación explícita con pthread.

    La ejecución de std::this_thread::sleep_for no cambia dependiendo de si se llama desde el hilo principal o no. Cuando se llama a sleep_for, el hilo actual, ya sea el hilo principal u otro hilo, se queda dormido durante la duración especificada. Sin embargo, es importante tener en cuenta que al trabajar con múltiples hilos, se requiere una sincronización y una gestión adecuadas de los hilos y los recursos para evitar condiciones de carrera, bloqueos o problemas de concurrencia.

Comments are closed.