std::unique_lock::lock
De cppreference.com
< cpp | thread | unique lock
void lock(); |
(desde C++11) | |
Bloquea el mutex asociado (es decir, toma posesión). Efectivamente llama a mutex()->lock().
Contenido |
[editar] Parámetros
(Ninguno)
[editar] Valor de retorno
(Ninguno)
[editar] Excepciones
- Cualquier excepción lanzada por mutex()->lock().
- Si no hay un mutex asociado, std::system_error con un código de error de std::errc::operation_not_permitted.
- Si el mutex ya está bloqueado por este objeto
unique_lock
(en otras palabras, owns_lock estrue
), std::system_error con un código de error de std::errc::resource_deadlock_would_occur.
[editar] Ejemplo
El siguiente ejemplo utiliza a lock
para readquirir un mutex que estaba desbloqueado.
Ejecuta este código
#include <mutex> #include <thread> #include <iostream> #include <vector> #include <chrono> int main() { int contador = 0; std::mutex mutex_del_contador; std::vector<std::thread> hilos; auto tarea_obrera = [&](int id) { std::unique_lock<std::mutex> cerrojo(mutex_del_contador); ++contador; std::cout << id << ", contador inicial: " << contador << '\n'; cerrojo.unlock(); // no mantener el bloqueo mientras simulamos una operación cara std::this_thread::sleep_for(std::chrono::seconds(1)); cerrojo.lock(); ++contador; std::cout << id << ", contador final: " << contador << '\n'; }; for (int i = 0; i < 10; ++i) hilos.emplace_back(tarea_obrera, i); for (auto &hilo : hilos) hilo.join(); }
Posible salida:
0, contador inicial: 1 1, contador inicial: 2 2, contador inicial: 3 3, contador inicial: 4 4, contador inicial: 5 5, contador inicial: 6 6, contador inicial: 7 7, contador inicial: 8 8, contador inicial: 9 9, contador inicial: 10 6, contador final: 11 3, contador final: 12 4, contador final: 13 2, contador final: 14 5, contador final: 15 0, contador final: 16 1, contador final: 17 7, contador final: 18 9, contador final: 19 8, contador final: 20
[editar] Véase también
Intenta bloquear el mutex asociado (es decir, tomar posesión) sin bloquearse. (función miembro pública) | |
Desbloquea el mutex asociado; es decir, libera su posesión. (función miembro pública) |