Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, Куда прикрутить потоки 
:(
    Опции темы
DareL
Дата 9.3.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.12.2008

Репутация: нет
Всего: нет



Посоветуйте, пожалуйста.
Прохожу WinApi.
Дали следующее заданик:

Цитата

Разработать многопоточное приложение, осуществляющее генерирование случайных чисел с нормальным законом распределения. Предусмотреть возможность сохранения выборок этих чисел в файлах и обработки чисел (например,  сортировку).  Подобрать примеры, которые наглядно демонстрируют работу созданного приложения. Оценить преимущества использования нескольких потоков для работы данного приложения.


Где и как тут можно использовать потоки?
PM MAIL ICQ   Вверх
Lazin
Дата 9.3.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



делишь массив на N частей, первую часть заполняешь из первого потока, вторую из второго и тд...
PM MAIL Skype GTalk   Вверх
ilyuha
Дата 9.3.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.7.2007

Репутация: нет
Всего: нет



а что конкретно не понятно, какие подзадачи выделять в отдельные потоки, или, непосредственно, сама реализация?
PM MAIL   Вверх
GoldFinch
Дата 9.3.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(DareL @  9.3.2009,  13:14 Найти цитируемый пост)
Оценить преимущества использования нескольких потоков для работы данного приложения.

какие могут быть преимущества у такого надуманного примера %)
PM MAIL ICQ   Вверх
DareL
Дата 9.3.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.12.2008

Репутация: нет
Всего: нет



Цитата(ilyuha @  9.3.2009,  13:44 Найти цитируемый пост)
а что конкретно не понятно, какие подзадачи выделять в отдельные потоки, или, непосредственно, сама реализация?

Какие подзадачи выделить.
С реализацией я, надеюсь, разберусь
PM MAIL ICQ   Вверх
zim22
Дата 9.3.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



потоки можно использовать на этапе сортировки.
первый поток один кусок массива сортирует, второй - другой.


--------------------
PM MAIL   Вверх
Artemon
Дата 10.3.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Просто сделай в потоке генерацию случайных числел, а в главном потоке выводи их на форму.

Вот тебе и 2 потока.

Подсказка:

Межпоточное взаимодействие сделай через WM_COPYDATA


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
GoldFinch
Дата 10.3.2009, 14:10 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(Artemon @  10.3.2009,  13:29 Найти цитируемый пост)
WM_COPYDATA 

зачем такой изврат %) подойдет обычная глобальная структура типа массива

вся выборка сгенерится быстрее чем сработает WM_COPYDATA
PM MAIL ICQ   Вверх
Artemon
Дата 10.3.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Если мы используем глобальные объекты для потоков, то необходима синхронизация.
Отсюда следует что топикстартеру нужно разобираться с межпроцессным взаимодействием, а я думаю это больший геморой, чем использовать WM_COPYDATA в данном случае.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Lazin
Дата 10.3.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Artemon @  10.3.2009,  17:16 Найти цитируемый пост)
Если мы используем глобальные объекты для потоков, то необходима синхронизация.

не обязательно
если к примеру нужно просто заполнить массив случайными числами, то
1. определяем число процессоров - cpu_count
2. делим массив на cpu_count частей
3. создаем cpu_count потоков, в качестве параметра, передаем в каждый поток начальный и конечный индексы массива, в которые поток должен записывать данные, а так-же указатель на сам массив( либо пару указателей)
4. ждем завершения потоков
5. получаем прирост производительности cpu_count*100% - x
Quick sort и merge sort то-же неплохо можно распараллелить...
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 10.3.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(Artemon @  10.3.2009,  17:16 Найти цитируемый пост)
с межпроцессным взаимодействием,

каким еще межпроцессным? там потоки а не процессы
PM MAIL ICQ   Вверх
Artemon
Дата 11.3.2009, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Lazin, твой способ подойдет только для случая, когда мы один раз заполним массив и закончим потоки, НЕ выводя циклически данные в основной поток. Иначе нам всеравно придется использовать синхронизацию.

Цитата

каким еще межпроцессным? там потоки а не процессы


Конечноже межпоточным, опечатался.


Это сообщение отредактировал(а) Artemon - 11.3.2009, 07:24


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
GoldFinch
Дата 11.3.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Artemon, синхронизация осуществляется оборачиванием кода в критические секции, это куда как проще и прозрачнее чем посылать сообщения
и где вообще сказано что в программе должно быть окно?
PM MAIL ICQ   Вверх
Lazin
Дата 11.3.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(DareL @  9.3.2009,  13:14 Найти цитируемый пост)
Разработать многопоточное приложение, осуществляющее генерирование случайных чисел с нормальным законом распределения.

основной поток запускает потоки и ждет пока они отработают, после чего может дальше работать, зачем здесь синхронизация?
Код

#include <iostream>
#include <stdio.h>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/thread/thread.hpp>
#include <algorithm>
#include <windows.h>


int get_cpu_count()
{
    SYSTEM_INFO info;
    ZeroMemory(&info, sizeof(SYSTEM_INFO));
    GetSystemInfo(&info);
    return info.dwNumberOfProcessors;
}


int main()
{
    std::vector<int> random_samples(100000);
    int cpu_count = get_cpu_count();
    boost::thread_group tasks;
    for(int i = 0; i < cpu_count; ++i)
    {
        tasks.create_thread( boost::bind( &std::generate<std::vector<int>::iterator, int ( void ) >
                                        , random_samples.begin() + (i*random_samples.size())/cpu_count
                                        , random_samples.begin() + ((i + 1)*random_samples.size())/cpu_count
                                        , &rand) 
                                        );
    }
    tasks.join_all();
}

PM MAIL Skype GTalk   Вверх
C/L
Дата 11.3.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(Lazin @  11.3.2009,  11:39 Найти цитируемый пост)
ждет пока они отработают

наверно это и есть синхронизация, только посредством tasks.join_all().
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.