История изменений
Исправление firkax, (текущая версия) :
Вполне нормально можно реализовать очередь пробуждения в юзерспейсе и без повторных засыпаний. Не костыли к мютексу, а именно честная очередь, где каждый ожидающий тред заносит себя в конец юзерспейсного списка, а тред, освобождающий объект, сам шлёт следующему в очереди сигнал пробуждения. Операции с очередью можно спрятать под спинлок или может быть сделать атомиками. Кода думаю немного, оверхед конечно будет по сравнению с нативным мютексом но не особо большой. Другое дело что это обычно не нужно.
Единственное - если кто-то убьёт тред в середине использования данной системы (стоящий в очереди или занявший объект), то могут быть проблемы, но это вроде и обычных мютексов касается.
Исходная версия firkax, :
Вполне нормально можно реализовать очередь пробуждения в юзерспейсе и без повторных засыпаний. Не костыли к мютексу, а именно честная очередь, где каждый ожидающий тред заносит себя в конец юзерспейсного списка, а тред, освобождающий объект, сам шлёт следующему в очереди сигнал пробуждения. Кода думаю немного, оверхед конечно будет по сравнению с нативным мютексом но не особо большой. Другое дело что это обычно не нужно.
Единственное - если кто-то убьёт тред в середине использования данной системы (стоящий в очереди или занявший объект), то могут быть проблемы, но это вроде и обычных мютексов касается.