Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2017, 14:44   #1
oksanavol
 
Регистрация: 28.05.2017
Сообщений: 8
По умолчанию Многопоточность

У меня есть задачка: Есть два массива и нужно вывести сколько раз значения второго массива попадаются в первом масиве, я это сделала, но нужно использовать многопоточность, И тут нужна ваша помощь.
Скидываю свой код, сильно не бросайте камнями. Я попробывала раздилить на два потока. Но хочется правильно и красво сделать.

Код:
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <thread> 

size_t CountValue(const int* array, const size_t size, const int value)
{
	const int* begin = array;
	const int* end = array + size;

	const int* low = std::lower_bound(begin, end, value);
	if ((low != end) && (*low == value))
	{
		auto up = std::upper_bound(low, end, value);
		return std::distance(low, up);
	}
	return 0;
}

int main()
{
	int arrayFirst[] = { 11, 5, 2, 8, 4, 5, 2, 5, 7, 9, 12, 16, 17, 18, 20 };
	int arraySecond[] = { 22, 5, 8, 3, 2, 9, 4, 3, 9, 10 };
	int size = sizeof(arraySecond) / sizeof(arraySecond[0]);
	std::sort(arraySecond, arraySecond + size);
	
	//const std::size_t maxThreadCount = std::thread::hardware_concurrency();
	//std::vector<std::thread> threads(maxThreadCount);

	std::vector<std::thread> threads1(size / 2);
	std::vector<std::thread> threads2(size / 2);
	for (int index = 0; index < size / 2; ++index) 
	{
		if (arraySecond[index] != arraySecond[index + 1])
			std::cout << "Value:" << arraySecond[index] << "-" << CountValue(arrayFirst, size, arraySecond[index]) << "\n";
		threads1[index].join();
	}
	for (int index = size / 2; index < size; ++index)
	{
		if (arraySecond[index] != arraySecond[index + 1])
			std::cout << "Value:" << arraySecond[index] << "-" << CountValue(arrayFirst, size, arraySecond[index]) << "\n";
		threads2[index].join();
	}
		
    return 0;
}
oksanavol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность JOKER:3 Общие вопросы Delphi 10 21.02.2013 10:03
Многопоточность nats C# (си шарп) 5 25.06.2011 11:51
многопоточность Freddi Krjuger Общие вопросы по Java, Java SE, Kotlin 1 15.05.2011 23:46
Многопоточность alex0097 Общие вопросы Delphi 3 05.05.2011 22:46