Estoy usando bloqueos de lectura/escritura en Linux y he encontrado que intentar actualizar un objeto bloqueado de lectura a un bloqueo de escritura bloquea los bloqueos.pthreads: bloqueos de lector/escritor, actualización del bloqueo de lectura para escribir el bloqueo
decir
// acquire the read lock in thread 1.
pthread_rwlock_rdlock(&lock);
// make a decision to upgrade the lock in threads 1.
pthread_rwlock_wrlock(&lock); // this deadlocks as already hold read lock.
He leído la página del manual y es bastante específica.
El subproceso de llamada puede interbloqueos si al la vez que se realiza la llamada se mantiene el bloqueo de lectura-escritura (ya sea una lectura o bloqueo de escritura).
¿Cuál es la mejor manera de actualizar un bloqueo de lectura a un bloqueo de escritura en estas circunstancias ... No quiero introducir una carrera en la variable que estoy protegiendo.
Presumiblemente, puedo crear otro mutex para abarcar la liberación del bloqueo de lectura y la adquisición del bloqueo de escritura, pero luego realmente no veo el uso de bloqueos de lectura/escritura. También podría usar simplemente un mutex normal.
Thx
Boost.Thread tiene el concepto UpgradeLockable, pero dudo que te sirva de mucho si tu código ya está en la onda en pthreads. –
@Steve. ¿Sabes cómo se implementa? ¿Utiliza un mutex separado que es lo que estaba considerando hacer? Supongo que podría descargarlo y verificarlo: o) – ScaryAardvark
No, no sé cómo lo hace Boost.Thread, lo siento. –