¿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?
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 utilizandonanosleep
, que es una función POSIX proveniente de libc. Por lo tanto, la llamada asleep_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 asleep_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.