std::unique_lock::lock
De cppreference.com
<tbody>
</tbody>
void lock(); |
(desde C++11) | |
Bloquea el mutex asociado (es decir, toma posesión). Efectivamente llama a mutex()->lock().
Parámetros
(Ninguno)
Valor de retorno
(Ninguno)
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.
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
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) |