std::shared_lock<Mutex>::lock
De cppreference.com
< cpp | thread | shared lock
void lock(); | (desde C++14) | |
Bloquea el mutex asociado (es decir, toma su propiedad) en modalidad compartida. Efectivamente llama a mutex()->lock_shared().
Contenido |
[editar]Parámetros
(Ninguno)
[editar]Valor de retorno
(Ninguno)
[editar]Excepciones
- Cualquier excepción lanzada por mutex()->lock_shared().
- 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
shared_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
Esta sección está incompleta Razón: mostrar un ejemplo significativo de shared_lock::lock |
Ejecuta este código
#include <iostream>#include <mutex>#include <string>#include <shared_mutex>#include <thread> std::string archivo ="Contenido original.";// Simula un archivostd::mutex mtx_salida;// mutex que protege operaciones de salida.std::shared_mutex mtx_archivo;// mutex lectura/escritura void leer(int id){std::string contenido;{std::shared_lock cerrojo(mtx_archivo, std::defer_lock);// No bloquearlo al inicio. cerrojo.lock();// Bloquearlo aquí. contenido = archivo;}std::lock_guard cerrojo(mtx_salida);std::cout<<"Contenido leído por el lector #"<< id <<": "<< contenido <<'\n';} void escribir(){{std::lock_guard cerrojo_de_archivo(mtx_archivo); archivo ="Contenido nuevo";}std::lock_guard cerrojo_de_salida(mtx_salida);std::cout<<"Contenido nuevo guardado.\n";} int main(){std::cout<<"Dos lectores leyendo de archivo.\n"<<"Un escritor que compite con ellos.\n";std::thread lector1(leer, 1);std::thread lector2(leer, 2);std::thread escritor(escribir); lector1.join(); lector2.join(); escritor.join();std::cout<<"Las primeras pocas operaciones al archivo listas.\n"; lector1 =std::thread(leer, 3); lector1.join();}
Posible salida:
Dos lectores leyendo de archivo. Un escritor que compite con ellos. Contenido leído por el lector #1: Contenido original. Contenido leído por el lector #2: Contenido original. Contenido nuevo guardado. Las primeras pocas operaciones al archivo listas. Contenido leído por el lector #3: Contenido nuevo
[editar]Véase también
Intenta bloquear el mutex asociado (función miembro pública) | |
Desbloquea el mutex asociado (función miembro pública) |