PriorityQueue - Rust #004 - Blocking Dequeue
Dans cette vidéo, on poursuit la construction de notre Priority Queue concurrente. On ajoute cette fois une version bloquante de la méthode dequeue() et la gestion de l'arrêt contrôlé avec shutdown_immediate().
Au programme
- Pourquoi
try_dequeue()n'est pas suffisante (le problème du polling) - Conception d'une méthode bloquante
dequeue()avecCondvar - Le prédicat d'attente
(!pq.is_empty()) || closed - Gestion des spurious wakeups (réveils intempestifs)
- L'ordre mutation puis notification pour un comportement sûr
- Implémentation d'un arrêt immédiat (
shutdown_immediate) propre et cohérent
Une étape importante avant d'introduire les arrêts gracieux et les timeouts dans la prochaine vidéo.
Liens utiles
Code source : github.com/xigh/pq-async-rs
PriorityQueue en Rust -- série vidéo
- PriorityQueue - Rust #001
- PriorityQueue - Rust #002 - Équité
- PriorityQueue - Rust #003 - Multithreading
- PriorityQueue - Rust #004 - Blocking Dequeue
- PriorityQueue - Rust #005 - Graceful Shutdown
- PriorityQueue - Rust #006 - async/await