Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2022, 21:51
Ответы с готовыми решениями:

Потоки в windows и семафоры
Здравствуйте,помогите пожалуйста разобраться. Задание: Написать систему из нескольких независимых потоков,совместно решающих квадратное...

Потоки и семафоры в Java
Такой вопрос, если у меня есть задание: В потоке А формируется общий ресурс (формирует файл), а в потоке В обработать его (отсортировать...

Философы Дейкстры: семафоры и потоки - ошибка выполнения
Делаю тут лабу - известная задача о философах: Есть код, который выбрасывает исключение &quot;access violation at ...: read of adress...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2022, 21:51
Помогаю со студенческими работами здесь

Создать потоки и разделить на эти потоки итерации по формуле арифметической прогрессии
В общем я еще балван и новичок в py, хочу узнать. Возможно ли по значению spinBox создать количество потоков и разделить на эти потоки...

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Потоки ввода/вывода, файловые потоки
Объясните, пожалуйста, механизм считывания данных. Перелопатил кучу статей в интернете и всё равно не понял как это работает. Понял...

Семафоры
Здравствуйте. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/ipc.h&gt; #include...

Семафоры
Есть код пишет в память 12121212 и записывает в файл. Что нужно поменять, чтобы записывалось, например, 21212121? #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru