Здравствуйте, ilnar, Вы писали:
I>как я понял автора задачи, в список данные только добавляются. значит сами данные меняться не будут.
Список может и уменьшаться и увеличиваться, т.к. пока он не достигнет какогото размера — он увеличивается, а когда достиг — закольцовывается (старые данные удаляются, а на их место пишутся новые). Поэтому нужно весь список блокировать.
Здравствуйте, kondrik, Вы писали:
K>Здравствуйте, ilnar, Вы писали:
I>>как я понял автора задачи, в список данные только добавляются. значит сами данные меняться не будут.
K>Список может и уменьшаться и увеличиваться, т.к. пока он не достигнет какогото размера — он увеличивается, а когда достиг — закольцовывается (старые данные удаляются, а на их место пишутся новые). Поэтому нужно весь список блокировать.
тогда другой вариант с пулом модификаций
или с тем же слепком, только если данные заменяются, отчуждаешь из общего списка заменяемые данные, если они у кого-то в слепке и в его место заносишь другие данные. Можно применить shared pointer с общей для всех блокировкой при подсчете кол-ва ссылок (объекты синхронизации — дорогие объекты): ссылки со слепков (если несколько) останутся, в основном списке на его место длругие данные. Придется смириться, что на некоторое время хранимых данных будет больше (в самом худшем случае в 2 раза) чем твое ограничение.
рекомендации: изучайте классические подходы решения задач. велосипеды давно придуманы. все идеи, что я писал, применяются в СУБД, когда куча параллельных транзакций.