0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 11
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Проблема с синхронизацией потоков Pthread27.02.2023, 01:42. Показов 577. Ответов 2
У меня есть программа, которая вызывает в отдельном потоке функцию потока ядра.
### Sim Cycle Started ### -- Sim Systems Run -- Причем, если убрать ожидание семафора в потоке ядра, то симуляция работает нормально, и бесконечно выводит такие сообщения: ### Sim Cycle Started ### Time logic Passed Time logic data = 1 -- Sim Systems Run -- ACS Logic Passed ACS data = 2 HAPPY WORK = 2 ### Sim Cycle Passed ### С чем может быть проблема, почему могут не выполняться другие потоки и как это можно исправить ? Пробовал несколько вариантов решения проблемы, особо ничего не помогает. Структура PROP_CYCLE:
0
|
27.02.2023, 01:42 | |
Ответы с готовыми решениями:
2
Проблема с синхронизацией процессов Синхронизацией потоков посредством семафоров Проблема с вертикальной синхронизацией Photon проблема с синхронизацией |
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
27.02.2023, 02:12 | 2 |
Сообщение было отмечено LexaVeter как решение
Решение
Увидел первую ошибку, дальше не вникал:
у вас из главного потока вызывается функция time_logic_run ,которая обращается к потенцально неициализированному семафору time_logic_work ,который инициализируется внутри функции потока time_logic_update .Это UB. Инициализировать все нужно в главном потоке до старта рабочих потоков.
1
|
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 11
|
|||||||||||
27.02.2023, 05:52 [ТС] | 3 | ||||||||||
Вывел инициализацию семафоров в отдельные функции
### Sim Cycle Started ### Time logic Passed Time logic data = 1 -- Sim Systems Run -- ACS Logic Passed ACS data = 2 HAPPY WORK = 2 ### Sim Cycle Passed ### Со всеми системами вывод такой: Time logic Passed Time logic data = 1 ACS Logic Passed ACS data = 2 Clock24 Logic Passed Clock24 data = 3 SVS Logic Passed SVS data = 4 -- Sim Systems Run -- Termo Logic Passed Termo data = 5 EUP53 Logic Passed UAP14 Logic Passed Mach meters Logic Passed UVID-15FK Logic Passed Mech Aneroid Logic Passed UAP14 data = 7 HAPPY WORK = 10 UVID-15FK data = 9 HAPPY WORK = 10 EUP53 data = 6 HAPPY WORK = 10 Mach meters data = 8 HAPPY WORK = 10 Mech_aneroid data = 10 HAPPY WORK = 10 Ну тут понятно, что раскомментировать мьютексы надо, что я уже сделал, теперь все работает как часики, спасибо)
0
|
27.02.2023, 05:52 | |
27.02.2023, 05:52 | |
Помогаю со студенческими работами здесь
3
Проблема с синхронизацией объектов Проблема с вертикальной синхронизацией проблема с синхронизацией Lotus Traveler STM32F429 + LTDC+ VGA - проблема с синхронизацией. проблема с синхронизацией звука через MIDI-клавиатуру Проблема с синхронизацией многопоточной реализации алгоритма Карацубы для перемножения длинных полиномов Синхронизация потоков: проблема гонки потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
|
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
|
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
|
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
|
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
|