Salve, stavo vedendo
questo articolo per capire il funzionamento dei mutex gerarchici, da usare per evitare la maggior parte dei deadlock.
Per come sono stati costruiti, il mutexA non può essere bloccato se è già stato bloccato mutexB, ma ci sono alcune cose che non mi sono chiare.
1) La variabile threadLevel (inizializzata a 0) è dichiarata thread_local, quindi ogni thread avrà la sua? Se fosse così, ogni nuovo thread la vedrebbe al suo valore iniziale e il controllo isLockValid() andrebbe sempre a buon fine.
2) Se anche i mutex vengono bloccati nell'ordine giusto, non è detto che verranno anche liberati nell'ordine inverso. Per esempio un thread dalla durata di 1 secondo blocca mutexA e un altro dalla durata di 2 secondi blocca mutexB. Per il secondo thread il valore di previousLevel sarà quello di mutexA.level, che verrà ripristinato alla fine, quindi mutexA non potrà più venir bloccato.
Potreste aiutarmi a sciogliere questi dubbi? vi ringrazio.