Страниц: [1]
  Печать  
Автор Тема: thread-safe std::list  (Прочитано 7219 раз)
яков
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« : Марта 23, 2006, 07:11:10 pm »

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

Сообщений: 0


Просмотр профиля
« Ответ #1 : Марта 23, 2006, 07:25:35 pm »

А rwlock не поможет?
Записан
яков
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #2 : Марта 23, 2006, 10:25:25 pm »

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

PS ну или если можна пападробней
Записан
Evgeniy
Jr. Member
**
Offline Offline

Сообщений: 73


Просмотр профиля
« Ответ #3 : Марта 24, 2006, 07:56:30 pm »

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

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