В прошлом вопросе я спросил о реализации барьеров pthread без гонок разрушения:
Как барьеры могут быть разрушены, как только pthread_barrier_wait возвращается?
и получен от Майкла Берра с помощью идеальное решение для локальных барьеров процесса, но не подходит для барьеров, разделяемых процессом. Позже мы проработали некоторые идеи, но так и не пришли к удовлетворительному выводу, и даже не начали разбираться в случаях сбоя ресурсов.
Возможно ли в Linux создать барьер, который удовлетворяет этим условиям:
Попытка Майкла решить проблему Случай с общим процессом (см. связанный вопрос) имеет неудачное свойство: какой-то системный ресурс должен быть выделен во время ожидания, что означает, что ожидание может завершиться неудачно. И неясно, что вызывающий может разумно сделать, когда ожидание барьера не удается, поскольку весь смысл барьера заключается в том, что небезопасно продолжать, пока оставшиеся N-1
потоки не достигнут его ...
Решение в пространстве ядра может быть единственным способом, но даже это сложно из-за возможности сигнала, прерывающего ожидание, без надежного способа его возобновления ...