Conditions avec les ReentrantReadWriteLock()
Programmation Concurrente (2016) :: Questions/réponses (french or english) :: Questions sur les TD/TME (semaine 7)
Page 1 sur 1
Conditions avec les ReentrantReadWriteLock()
Bonjour,
Dans le TME 7, dans la classe EnsembleDonnees j'ai crée une variable ReentrantReadWriteLock ainsi que trois conditions associées au producteur, au lecteur, et à l'effaceur.
Dans une méthode lecture() (appelée par la classe Lecteur) il y'a un verrou lock.readLock().lock()/unlock() qui "englobe" la méthode, et dans celle-ci j’exécute un await temporisé sur la condition du lecteur.
Le problème est qu'à l’exécution, une "IllegalMonitorStateException" est levée, car le await est exécuté sur une condition crée sur un writeLock(), et il est entouré par des lock.readLock().lock()/unlock() et non des lock.writeLock().lock()/unlock() .
Le seul moyen pour ne plus avoir cette erreur est donc de remplacer les readLock() par des writeLock(), mais dans ce cas l'implémentation ReentrantReadWriteLock perd tout son intérêt.
Cordialement.
Dans le TME 7, dans la classe EnsembleDonnees j'ai crée une variable ReentrantReadWriteLock ainsi que trois conditions associées au producteur, au lecteur, et à l'effaceur.
Dans une méthode lecture() (appelée par la classe Lecteur) il y'a un verrou lock.readLock().lock()/unlock() qui "englobe" la méthode, et dans celle-ci j’exécute un await temporisé sur la condition du lecteur.
Le problème est qu'à l’exécution, une "IllegalMonitorStateException" est levée, car le await est exécuté sur une condition crée sur un writeLock(), et il est entouré par des lock.readLock().lock()/unlock() et non des lock.writeLock().lock()/unlock() .
Le seul moyen pour ne plus avoir cette erreur est donc de remplacer les readLock() par des writeLock(), mais dans ce cas l'implémentation ReentrantReadWriteLock perd tout son intérêt.
Cordialement.
Daoud- Posts : 1
Join date : 03/12/2018
Programmation Concurrente (2016) :: Questions/réponses (french or english) :: Questions sur les TD/TME (semaine 7)
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum