|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||
Асинхронность и Семафор03.04.2021, 20:27. Показов 5908. Ответов 34
Метки нет (Все метки)
здесь как-то затронули тему...
что-то из источников складывается ощущение - что у каждого потока должен быть свой семафор?... в отличие от condition variable... верно ли моё ощущение?.. и тогда код, предоставленный, может не совсем корректен? Добавлено через 41 минуту p.s. сделаю оговорку:
хоть бинарный семафор и мьютекс часто используют для одинаковой цели - для синхронизации, но механизм работы у них разный: мьютекс блокирует, семафор сигнализирует... поэтому 1й используется для доступа к разделяемым переменным, а второй в отношениях producer-consumer (writer-reader) между потоками... в данном случае - разделяемый доступ к std::cout... - может, правильнее делать 2 семафора (для writer и для reader) - как здесь... механизм вкратце здесь важно:
в c++11 semaphore не вошёл, как и в boost, потому что разработчики предпочли mutex и condition_variable. поскольку работа семафора нестабильна... (пишу, как помню, - источник не найду сейчас)... наверно, по стандартной причине для сигнализирующих инструментов - spurious_wakeups:
0
|
|||||||||||
| 03.04.2021, 20:27 | |
|
Ответы с готовыми решениями:
34
Семафор Семафор в ОС
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 05.04.2021, 10:59 [ТС] | |||||||
сейчас нет msys2 32x, чтобы gcc/mingw c++20 32x потянуть оттуда... не знаю, как установить... сижу на c++17, установленного из msys2 год назад (gcc 9.3, даже не 10.0)Добавлено через 34 минуты
![]()
0
|
|||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 05.04.2021, 14:03 | |
|
JeyCi, проблема из вашей цитаты (кстати, почему не приводите ссылку на первоисточник?) - это не проблема вектора, а проблема кривых рук автора, как бы грубо это не звучало. Если мы передаем нечто по ссылке, и при передаче по ссылке это нечто потенциально может изменить свое состояние (в частности, может быть перемещено), то при выполнении в конкурентной среде у нас всегда будет гонка за это состояние. Независимо от того, вектор у нас или очередь, или еще что.
Глобально же проблема автора именно в том (и на это ему указали в ответах), что у него слишком много состояний. Он написал неоправданно сложный код, в котором запутался и потерял контроль над происходящим.
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||
| 05.04.2021, 19:04 [ТС] | |||||||||
|
ссылка
https://codereview__stackexchange__com__/questions/247483/blocking-queue-in-c-using-semaphores
боюсь порежут
думаю, ваша правда в захвате в люмбду [this]... возможно, действительно, лучше в его случае [*this]?.. ?или неправильная передача функции в поток
- возможно, тут и теряет контроль... мне надо сильно потестить те коды, чтобы разобраться... разберусь ли?... но если вы своим Pro взглядом увидите bug - черканите please
0
|
|||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 05.04.2021, 19:33 | |||
|
Здесь надо следить за временем жизни объектов, которые ты передаёшь в поток, и понимать, что именно ты передаёшь по ссылке, а что по значению. Добавлено через 3 минуты Если ты передаёшь в поток что-то по ссылке или по указателю, то необходимо гарантировать, что поток завершиться раньше, чем будет уничтожен объект, на который ты ссылаешься.
1
|
|||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 05.04.2021, 19:48 | ||
|
Только выбрал для этого стандартный контейнер(да ещё и вектор, которому не "запретил" реаллокацию). Сделать такую очередь на базе стандартных контейнеров/адапторов не получится(без идиотизма). Хотя не сложно написать такую очередь(с раздельной блокировкой для "хвоста" и "головы") самостоятельно. Очереди на базе стандартных контейнеров должны полностью блокироваться на время любых операции, а для снижения времени блокировки и повышении безопасности по исключениям разумно использовать unique_ptr'ы(как вы заметили), если объекты не поддерживают noexcept move семантику. Всё остальное, что вы написали - не относится к проблемам того кода.
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 05.04.2021, 19:50 [ТС] | |||||||
0
|
|||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|||
| 05.04.2021, 20:08 | |||
|
На сами объекты thread тоже никто не ссылается.
1
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||||
| 06.04.2021, 10:10 [ТС] | |||||||||||||
действительно, в многопоточности в норм. коде и проблем с вектором не возникает (тема: Многопоточное заполнение вектора векторов) и асинхронность нормально задействуется...Добавлено через 2 часа 16 минут несколько remarkable_things для async: 1) рекурсивный запуск асинхр. потоков
3) зацикливание отлова результата работы потоков, чтобы не блокировать код (хорошие объяснения на U++) 4) отлов исключений
std::launch::async enable asynchronous evaluation std::launch::deferred enable lazy evaluation 6) для U++ есть такой класс
Добавлено через 1 минуту ИТОГО: Основные вопросы, возникающие при старте знакомства с async и MT: - обходу блокировки при возвращениИ результата из fut.get() (что впрочем справедливо и для thread.join()) - выбросу исключений в основной поток, если что-то пойдёт не так *** ... всё-таки остаётся последний вопрос: раз cout и cerr у нас в разных потоках всегда в C/C++ -- не потеряю ли я чего (бросая не понятно куда исключения и результаты) -- в общем, нужен ли какой специальный hint (чтобы бросать и туда, и туда)... или синхронизации с cout И try{} catch(...){} для отлова исключений достаточно? сама отвечу: - думаю, что достаточно... лучше в run-time(чуть что поправят) Добавлено через 29 минут P.S. jthread (C++20) std::thread with support for auto-joining and cancellation
0
|
|||||||||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 06.04.2021, 19:20 [ТС] | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 10.04.2021, 16:21 [ТС] | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 10.04.2021, 16:22 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||
| 10.04.2021, 19:25 [ТС] | |||||||||||
|
чем просто cout - ДА (п.4 и п.8)
Однако все равно можно использовать cin / cout и достичь той же скорости, что и scanf / printf, включив следующие две строки в функцию main ():
Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 22.04.2021, 21:15 [ТС] | ||
|
P.S.
касательно сигнальных механизмов IPC (в частности семафора)
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 26.04.2021, 21:18 [ТС] | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 22.05.2021, 07:46 [ТС] | ||
|
p.s. если доберусь до разработки на Linux: Lib32gcc-10-dev-x32-cross Download for Linux (deb) Добавлено через 8 минут Debian vs Ubuntu Добавлено через 23 минуты topic "Установил Linux, как установить Qt" - здесь советуют Fedora (Red Hat) - рус.яз. Red Hat Enterprise Linux (платная)
0
|
||
| 22.05.2021, 07:46 | |
|
Семафор [C++] семафор Семафор Семафор
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|