LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

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

Единственное - если кто-то убьёт тред в середине использования данной системы (стоящий в очереди или занявший объект), то могут быть проблемы, но это вроде и обычных мютексов касается.

Исходная версия firkax, :

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

Единственное - если кто-то убьёт тред в середине использования данной системы (стоящий в очереди или занявший объект), то могут быть проблемы, но это вроде и обычных мютексов касается.