Вы находитесь на странице: 1из 12

C++ 11

Thread

Verificar versin del g++


g++ --version

Compilar con g++


g++ -std=c++11 -pthread file_name.cpp

std::thread

La clase thread representa a un hilo en ejecucin. Los hilos


permiten que mltiples fragmentos de cdigo se ejecuten de
forma asncrona y simultnea
Los Threads comienzan inmediatamente despus de la ejecucin
del constructor del objeto asociado (y en espera de los retrasos
que puedan generar el SO).

std::thread::thread (Constructor)
Construye un nuevo objeto Thread .
1) Crea un objeto nuevo que no representa a ningn hilo .
2) Construye el objeto Thread que representa un nuevo hilo de
ejecucin.
3) Crea un nuevo objeto std::thread y la asocia con un hilo en
ejecucin. Primero, el constructor copia todos los argumentos para el
almacenamiento local del nuevo hilo.

int main()
{
int n = 0;
std::thread t1; // t1 is not a thread
std::thread t2(f1, n+1); // pass by value
std::thread t3(f2, std::ref(n)); // pass by reference
std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread
t2.join();
t4.join();
std::cout << "Final value of n is " << n << '\n';
}

Threads
La primera cosa es crear un
objeto thread y darle una tarea
que hacer.
El main thread espera que los
hilos terminen de ejecutarse
exitosamente para luego hacer
un join().
En ese lapso de espera el main
est en desuso.

Threads

En el mundo real las


cosas no son tan ideales
como se espera y ms o
menos funciona como el
grfico.

Threads

Mientras el thread esta


iniciando via el
constructor std::thread
t, podria haber
sobrecarga al crear
thread (puede reducirse
mediante el uso de
subprocesor). Las lineas
punteadas indican
posiblre estado
bloqueado

std::thread::joinable: Comprueba si el objeto hilo identifica un


subproceso activo de la ejecucin.
std::thread::get_id: devuelve el id del hilo.
td::thread::native_handle: Devuelve el identificador de
subproceso definido aplicacin subyacente .
std::thread::hardware_concurrency: devuelve el nmero de
hilos simultneos soportados por la implementacin.
std::thread::join: espera a que el hilo termine su ejecucin.
std::thread::detach: Separa el hilo de ejecucin del objeto hilo, lo
que permite que la ejecucin contine de manera independiente.
std::thread::swap: Intercambia los contenedores de dos obj.
thread.

Sincronizacin
Los threads deben interactuar entre s, por lo tanto es necesario
implementar mecanismos de comunicacin y sincronizacin pues la
memoria de los mismos se comparte entre todos ellos por igual y
todos ellos tienen acceso al mismo segmento de memoria en cualquier
momento por lo que la integridad de los datos puede verse
comprometida si no usamos primitivas de sincronizacin.
Mutex
Semforos
Variables de condicin - (mtodos: wait, signal)

Exclusin mutua. (std::mutex)


Los algoritmos de exclusin mutua permite a varios hilos
protegerse del acceso simultneo a recursos compartidos. Esto
permite evitar corrupciones de datos y proporciona bases para la
sincronizacin entre hilos.
Un subproceso de la llamada posee una mutex desde el momento
en que se llama correctamente a cualquier lock try_lock o hasta
que se llama a unlock .
Cuando un hilo posee un mutex, todos los otros hilos se bloquear
(para las llamadas a lock) o recibir un valor de retorno false (por
try_lock) si intentan reclamar la propiedad de la mutex.
Un subproceso de llamada no debe ser propietario de una mutex
antes de llamar a lock o try_lock .

Algunos ejemplos.

Вам также может понравиться