Реализация мьютекса FIFO в потоках pthreads

Я пытаюсь реализовать двоичное дерево, поддерживающее одновременные вставки (которые могут происходить даже между узлами), но без необходимости выделять глобальная блокировка или отдельный мьютекс или мьютексы для каждого узла. Скорее, количество таких выделенных блокировок должно быть порядка количества потоков , использующих дерево.

Следовательно, я получаю проблему типа конвоя блокировок . Проще говоря, это то, что потенциально происходит, когда два или более потоков делают следующее:

1 for(;;) {
2   lock(mutex)
3   do_stuff
4   unlock(mutex)
5 }

То есть, если поток №1 выполняет инструкции 4-> 5-> 1-> 2 все в одном "процессоре" burst ", то Поток №2 перестает выполняться.

С другой стороны, если бы существовала опция блокировки типа FIFO для мьютексов в pthreads, то такой проблемы можно было бы избежать. Итак, есть ли способ реализовать блокировку мьютексов типа FIFO в pthreads? Можно ли это сделать с помощью изменения приоритетов потоков?

12
задан ManRow 22 March 2011 в 01:33
поделиться