Я пытаюсь реализовать двоичное дерево, поддерживающее параллельные вставки (что может происходить даже между узлами), но без необходимости выделять глобальную блокировку или отдельный мьютекс или мьютексы для каждого node. Скорее, количество таких блокировок должно быть порядка количества потоков, использующих дерево.
Следовательно, я заканчиваю тип проблемы блокировки конвоя. Объясняется проще, это то, что потенциально может произойти, когда два или более потока выполняют следующие действия:
1 for(;;) { 2 lock(mutex) 3 do_stuff 4 unlock(mutex) 5 }
То есть, если Thread # 1 выполняет команды 4- > 5- > 1- > 2 в одном пакете "cpu", то Thread # 2 получает голод от выполнения.
С другой стороны, если в pthreads существует опция блокировки типа FIFO-типа для мьютексов, то такой проблемы можно было бы избежать. Итак, есть ли способ реализовать блокировку мьютекса FIFO в pthreads? Может ли это изменить приоритеты потоков?