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 archivo std::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) |