169 похожих чатов

Здравствуйте. Есть 2 потока c бесконечным циклом. Один генерирует файлы

и наполняет ими контейнер. Другой забирает эти файлы на отправку и очищает контейнер. У каждого своя периодичность цикла, которую можно задать по времени. Правильно ли будет использовать volatile для контейнера? Нет ли риска потерять данные при этом?

21 ответов

26 просмотров

а что за контейнер? Звучит как задача для BlockingQueue или подобных решений которые уже есть готовые

Olesya-Garipova Автор вопроса
Stas
а что за контейнер? Звучит как задача для Blocking...

мапа <String, List<File>>. При блокировке получается ситуация, что если первый поток выполняет много работы, то он так и не отдает управление контейнером второму потоку. Забираю данные, создавая новую мапу: val data = HashMap(container) container.clear()

Olesya Garipova
мапа <String, List<File>>. При блокировке получает...

Надо через одну структуру вести обмен и делать это быстро. Быстро положить готовые данные и быстро забрать, чтобы никого не блокировать. Задача producer-consumer.

Olesya Garipova
мапа <String, List<File>>. При блокировке получает...

Так есть же concurent мапы всякие готовые, посмотри и выбери что подходит. А то звучит как-то странно, что ты делаешь

Olesya Garipova
мапа <String, List<File>>. При блокировке получает...

типичный consumer producer. В с++ решалось через condition_variable. (И без "У каждого своя периодичность цикла", но может вам это зачем-то нужно.) Посмотрите в сторону concurrent queue и оцените, можете ли отказаться от "периодичности цикла".

Leonid B.
Надо через одну структуру вести обмен и делать это...

+1. Быстро скопировать File из мапы, удалить из мапы и отдать lock

Olesya-Garipova Автор вопроса
Pavel
типичный consumer producer. В с++ решалось через ...

Спасибо, изучу. От периодичность отказаться не могу по тз, к сожалению

Olesya Garipova
Спасибо, изучу. От периодичность отказаться не мог...

Кооперативную многопоточность знаете? При таком тз выглядит, как кейз для нее

Olesya-Garipova Автор вопроса
Olesya Garipova
не знакома, пошла гуглить)

> У каждого _своя_ или не для кооп. мн., если у одного цикл 2 сек из 4х, а у второго 4 из 6 (а не так, что сначала 2 сек из 5 один, а потом оставшиеся 3 из 5 второй). Вообще такое тз странное, ну да ладно. Это лаба/домашка или что-то коммерческое?

Olesya Garipova
рабочая задача

Ну и пусть producer и consumer с нужной им периодичностью используют общую синхронизированную структуру для обмена данными. Нужно только учесть, что как минимум запись в очередь будет блокировать читателя.

Olesya-Garipova Автор вопроса
Leonid B.
Ну и пусть producer и consumer с нужной им периоди...

вот с этим я и столкнулась, что при маленьком периоде и большом объеме записи, управление до читателя просто не доходит 😞

Olesya Garipova
вот с этим я и столкнулась, что при маленьком пери...

подозреваю, что у вас продюсер делает проверить таймер, взять лок, создать данные, положить в контейнер, отдать лок а надо примерно так проверить таймер, создать данные, взять лок, положить в контейнер, отдать лок в консюмере действовать аналогично Кстати, не оч понятно,, зачем была взята мапа. Смотрите в сторону concurrent queue

Olesya Garipova
вот с этим я и столкнулась, что при маленьком пери...

Потому что общие данные нужно менять быстро и сразу отпускать 😏 Interthread communication - оно такое.

Pavel
подозреваю, что у вас продюсер делает проверить та...

При совсем маленьком периоде, если без аналога condition_variable, вы можете получить live lock (а не deadlock), что вы м.б. и получаете

Olesya-Garipova Автор вопроса
Pavel
подозреваю, что у вас продюсер делает проверить та...

по второму сценарию делаю) первый поток опрашивает поставщиков данных, которые отдают ему уже готовые списки файлов и сохраняет в мапу <Поставщик, список файлов>

Olesya Garipova
по второму сценарию делаю) первый поток опрашивает...

к черту карту, вставайте в очередь. вам уже несколько чел написали

Olesya-Garipova Автор вопроса

спасибо, видимо тогда придется делать объекты для очереди, т.к. у каждого файла должна сохраняться инфа о поставщике

Olesya Garipova
спасибо, видимо тогда придется делать объекты для ...

но все равно, если у вас в бассейн (контейнер) через трубу стабильно вливается больше, чем может вылиться из слива, то бассейн в конце концов переполнится. нужно, чтобы in the long run производительность консьюмеров была не меньше, чем продьюсеров

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта