|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 2
|
|
потоки , Семафоры и массивы23.04.2022, 21:51. Показов 485. Ответов 0
Доброго времени суток! Нуждаюсь в помощи и объяснении. Дали на зачёт работу и не могу правильно избавится от глобальных переменных и настроить семафоры. По мимо всего нужно , что бы в массиве можно было закинуть числа и буквы, а недостаток символов закрылись пробелами(нулями )Уже не первый день спотыкаюсь об это. Подскажите кто чем может.
вот мой первоначальный, рабочий казалось бы код #include <iostream> #include <windows.h> using namespace std; volatile int a[10]; int k = 0; int delay; handle hsemaphore; handle hsemaphore1; dword winapi work(lpvoid array) { cout << "введите временной интервал( 1 cекунда = 1000 ): "; cin >> delay; cout << "слагаемые числа:" << endl; int* numm = new int[2]; numm = (int*)array; for (int i = 0; i < k; i++) { cout << "[" << i + 1 << "] - " << numm[i] << endl; sleep(delay); } array = numm; releasesemaphore(hsemaphore, 1, null); return 0; } dword winapi sumelement(lpvoid array) { int* numm = new int[2]; numm = (int*)array; int sum = 0; for (int i = 0; i < k; i++) { sum += numm[i]; } cout << "сумма элементов: " << sum; releasesemaphore(hsemaphore, 1, null); return 0; } int main() { setlocale(lc_all, "rus"); handle hthread; dword idthread; handle hthread1; dword idthread1; int size; cout << "введите размерность массива от 1 до 10: "; cin >> size; int* arr = new int[size]; cout << "введите элементы массива через пробел: "; int num; for (int i = 0; i < size; i++) { cin >> num; arr[i] = num; } cout << "размерность и элементы массива: " << endl; for (int i = 0; i < size; i++) { cout << "[" << i + 1 << "] - " << arr[i] << endl; } cout << "число k: "; cin >> k; hsemaphore = createsemaphore(null, 0, 10, null); if (hsemaphore == null) return getlasterror(); // создаем поток, который готовит элементы массива hthread = createthread(null, 0, work, (void*)arr, 0, &idthread); if (hthread == null) return getlasterror(); waitforsingleobject(hthread, infinite); waitforsingleobject(hsemaphore, infinite); closehandle(hsemaphore); closehandle(hthread); hsemaphore1 = createsemaphore(null, 0, 10, null); if (hsemaphore1 == null) return getlasterror(); // создаем поток, который готовит элементы массива hthread1 = createthread(null, 0, sumelement, (void*)arr, 0, &idthread1); if (hthread1 == null) return getlasterror(); waitforsingleobject(hthread1, infinite); waitforsingleobject(hsemaphore1, infinite); closehandle(hsemaphore1); closehandle(hthread1); return 0; } Само задание Поток main должен выполнить следующие действия: создать массив, размерность и элементы которого вводятся пользователем с консоли; ■ вывести размерность и элементы исходного массива на консоль; - ввести число к: ■ запустить поток work: запустить поток SumElement: ■ освобождение выходной поток stdout после вывода на консоль каждого нового элемента массива. • выводить на экран поэлементно элементы массива (итогового) параллельно с работой потока work; ■ известить поток SumElement о начале суммирования (момент запуска произойдёт после того, будут выведены на консоль к элементов массива). Поток work должен выполнить следующие действия (Для синхронизации с потоком main - использовать семафор. Проверить работу программы используя критическую секцию для синхронизации с потоком main, объяснить отличия, если есть!): запросить у пользователя временной интервал, требуемый для отдыха после подготовки одного элемента в массиве; ■ Поиск в массиве элементов, соответствующих цифрам (слева поместить в массив цифры, а остальные элементы массива - заполнить пробелами). Элементы символы. извещать поток main о новом элементе: ■ после каждого готового элемента отдыхать в течение заданного интервала времени; Поток SumElement должен выполнить следующие действия (Для синхронизации с потоком main, использовать бинарный семафор!): ■ ждёт от потока main сообщения о начале суммирования; - выполнить суммирование элементов (кодов) итогового массива до заданной позиции к: - вывести итоговую сумму.
0
|
|
| 23.04.2022, 21:51 | |
|
Ответы с готовыми решениями:
0
Потоки в windows и семафоры Потоки и семафоры в Java Философы Дейкстры: семафоры и потоки - ошибка выполнения |
| 23.04.2022, 21:51 | |
|
Помогаю со студенческими работами здесь
1
Создать потоки и разделить на эти потоки итерации по формуле арифметической прогрессии Что такое потоки ввода, потоки вывода? Потоки ввода/вывода, файловые потоки Семафоры Семафоры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|