|
Дата: 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 вероятно имел в виду то, что вместо общего на весь список мютекса, который должен применяться во всех операциях доступа, можно применить блокировку чтения/записи (опять же ко всему списку), но при этом поиск в списке интерпретировать как операцию чтения (допускает множественный доступ), а операции вставки/удаления/перемещения в списке вполне логично интерпретировать как монопольную операцию записи. Думаю так, примерно...  |