QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 18:56
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Языки и алгоритмы —› thread-safe std::list

Посл.ответ Сообщение


Дата: 23 Мар,  16:11

Никак не придумать как можно сделать wrapper около std::list так чтобы он был thread-safe, главное условие: не защищать весь список 1 мютексом, то есть чтоб во время добавления елементов можно было работать с началом списка (добавление в конец)


Дата: 23 Мар,  16:25

А rwlock не поможет?


Дата: 23 Мар,  19:25

каким местом?

PS ну или если можна пападробней


Дата: 24 Мар,  16:56

яков
Никак не придумать как можно сделать wrapper около std::list так чтобы он был thread-safe, главное условие: не защищать весь список 1 мютексом, то есть чтоб во время добавления елементов можно было работать с началом списка (добавление в конец)

Сомневаюсь в осуществимости вашей мечты - на самом деле все очень просто: вы длжны "лочить" либо весь список либо каждую связку в списке. Третьего варианта скорее всего не существует.
Но блокировать каждую связку нельзя по причине необходимости модификации реализации списка. Да и не совсем понятен смысл блокировки связей, особенно когда они динамические... Кроме того, в этом варианте будут очень большие накладные расходы на просмотр списка - для каждого шага надо будет выполнять как минимум два обращения к ядру для синхронизации, что как минимум на несколько порядков дольше простого перемещения по указателям.
По поводу rwlock dsf вероятно имел в виду то, что вместо общего на весь список мютекса, который должен применяться во всех операциях доступа, можно применить блокировку чтения/записи (опять же ко всему списку), но при этом поиск в списке интерпретировать как операцию чтения (допускает множественный доступ), а операции вставки/удаления/перемещения в списке вполне логично интерпретировать как монопольную операцию записи. Думаю так, примерно...

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source