Espacios de nombres
Variantes
Acciones

std::shared_lock<Mutex>::lock

De cppreference.com
< cpp‎ | thread‎ | shared lock
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
Recuperación segura
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
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().

[editar]Ejemplo

#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)[editar]
Desbloquea el mutex asociado
(función miembro pública)[editar]
close