2016-10-30 2 views
1

Недавно я услышал о Reentrantlock, которые доступны на Java. Но я пытался реализовать параллельные структуры данных, такие как очереди приоритетов, используя openmp и C++.Reentrantlock in openmp

Мне было интересно узнать, существует ли аналогичный эквивалент в openmp и C++ или он может быть реализован с использованием pthreads? Если такой эквивалент существует, сообщите, как его использовать.

ответ

1

См. Описание omp_nest_lock на стр. 270 (PDF-страница 279) в OpenMP 4.5 standard.

Мета-вопрос: «Почему вы это делаете?»
Почему вы не просто используете что-то вроде TBB's Concurrent Priority Queue?
Вам нужно использовать OpenMP по другим причинам?
Это для вашего собственного образования?
Если нет, тогда TBB может быть более простым (теперь это Apache Licensed).

(FWIW Я работаю на Intel, который написал TBB, но я работаю на OpenMP, не Т :-))

+0

Я делаю лабораторный проект параллельных структур данных, где реализации должны быть сделаны в OpenMP. Я пытаюсь реализовать метод skip list, основанный на блокировке, упомянутый в книге «Искусство многопроцессорного программирования - Морис Херлихи и Нир Шавит» (стр. 352 - 360). Это потребовало от меня внедрения реентеррантов. Благодарим за ссылку на уже реализованную библиотеку. Но чтобы понять, как все происходит и пытается получить опыт написания параллельных алгоритмов и структур данных, я пытался сделать то же самое. – likecs

+0

Можете ли вы подробнее описать это утверждение (Pg 272 из вышеупомянутой книги): «Использование одной и той же блокировки OpenMP в разных конкурирующих группах приводит к неуказанному поведению». – likecs

+0

Поскольку вы уже заявили, что это образовательный проект, я просто собираюсь рассказать вам о том, чтобы найти определение «конкурирующей группы» в стандарте :-) (Большая часть обучения - это научиться учиться!) –

Смежные вопросы