Форум программистов, компьютерный форум CyberForum.ru

Потокобезопасно ли одновременно добавлять в конец list обьекты и удалять из середины? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удаление последнего символа в файле txt http://www.cyberforum.ru/cpp-beginners/thread1669522.html
Здравствуйте! Помогите пожалуйста! Как можно удалить самый последний символ в конце файла?
C++ Среднее арифметическое модулей четных элементов массива Здравствуйте! Помогите, пожалуйста, найти среднее арифметическое модулей четных элементов массива, расположенных между первым отрицательным и последним положительным элементами. http://www.cyberforum.ru/cpp-beginners/thread1669517.html
C++ Теряется указатель на начало односвязного списка
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <ctype.h> typedef struct Node { struct Node* next; int value; } Node; typedef struct List {
C++ Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод)
Имеется информация о клиентах телефонной компании и предоставляемых им услугах. Каждая услуга имеет собственный тариф, а каждый клиент может пользоваться произвольным набором услуг в течение ограниченного интервала времени (соответственно срокам договора). Имеются данные о фактическом использовании услуг. Вся указанная информация представлена текстовыми файлами, структура которых выглядит...
C++ Перехватывающая Функция с доступом к статичным членам класса http://www.cyberforum.ru/cpp-beginners/thread1669454.html
Возможно ли объявить, Функцию перехватчик таким образом чтобы она имела доступ к переменным класса. Оригинальная функция: void UStruct::Serialize( FArchive& Ar ) { Super::Serialize( Ar ); // Serialize stuff. Ar << ScriptText << Children;
C++ Адаптация куска кода, написанного по стандарту C++11, под стандарт C++03 есть код namespace cmd { inline auto get_size(const char *path) -> decltype( std::declval<struct dSTATE64>().st_size ) { struct dSTATE64 info; const auto re = dSTATE64(path, &info); подробнее

Показать сообщение отдельно
Valeryn
41 / 25 / 5
Регистрация: 17.05.2015
Сообщений: 163
25.02.2016, 02:17  [ТС]     Потокобезопасно ли одновременно добавлять в конец list обьекты и удалять из середины?
Цитата Сообщение от Убежденный Посмотреть сообщение
Да. О синхронизации в многопоточной среде нужно думать заранее.
Возможен такой вариант: пусть списков будет два.
Поток А выполняет проход по списку X, поток B в это время добавляет
новые элементы в список Y. Когда A доходит до конца своего списка X,
он вставляет в его конец все элементы из списка Y, а список Y очищает.
Здесь время блокировки будет минимально, только на то, чтобы
"отобрать" у потока B список Y.
Так у меня какая мысль была.
Есть N потоков и N списков.
Каждый поток работает только со своим списком и его парсит, вызывая у обьектов списка какую то функцию.
Но при определенных обстоятельств, тот или иной объект создает новые объекты. И тут проблема. Я могу пихать эти объекты в тот же список, какой поток их вызвал, что в принципе вообще избавит меня от блокировок. Но тогда списки будут расти не равномерно.
Либо синхронизировать все списки. Т.е. есть цикл опроса. Все потоки опросили свои списки, а все новые обьекты были добавлены во временный контейнер. После чего, когда цыкл закончился - в конец отдельным потоком с блокировками все эти обьекты забрасываются по потокам и только потом начинается новый цыкл опроса.
 
Текущее время: 22:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru