Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Yessman
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 7
#1

Разбить подсчет арифметической прогрессии на несколько потоков - C++

09.06.2014, 01:52. Просмотров 324. Ответов 0
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <windows.h>
#include <iostream>
 
using namespace std;
 
CRITICAL_SECTION cs;
int e;
int sh;
int col;
int mas;
int res=1;
int n;
// Функция потока
DWORD WINAPI ThreadFunc(LPVOID param)
{
    EnterCriticalSection(&cs);
    int* mas = new int[col];
    mas[0]=e;
    for (int i = 1; i <= col; i++)
    {
        mas[i]=e+sh*i;
    }
 
    for (int i = 0; i <= col; i++)
    {
        cout << mas[i] << '*' << flush;
    }
    for (int i = 0; i <= col; i++)
    {
        res= res*mas[i];
    }
    cout<<"="<<res<<flush;
    
    cout << endl;
    res=1;
    Sleep(3000);
    LeaveCriticalSection(&cs);
    return 0;
}
 
int main()
{
    cout<<"Vvedite pervii element posledovatelnosti"<<'\n';
    cin>>e;
    cout<<"Vvedite shag posledovatelnosti"<<'\n';
    cin>>sh;
    cout<<"Vvedite kolichestvo elementov posledovatelnosti"<<'\n';
    cin>>col;
    cout<<"Kolichestvo potokov:";
    cin>>n;
    //время проги
    LARGE_INTEGER freq;
    QueryPerformanceFrequency(&freq);
    LARGE_INTEGER start_time;
    QueryPerformanceCounter(&start_time);
    //создаем потки
    HANDLE* hThreads = new HANDLE[n];
    //крит секции
    InitializeCriticalSection(&cs);
 
    for (int i = 0; i < n; i++)
    {
        hThreads[i] = CreateThread(NULL, 0, ThreadFunc,NULL, 0, NULL);
    }
 
    WaitForMultipleObjects(n, hThreads, true, INFINITE);
 
    for (int i = 0; i < n; i++)
        CloseHandle(hThreads[i]);
    DeleteCriticalSection(&cs);
 
    LARGE_INTEGER end_time;
    QueryPerformanceCounter(&end_time);
    double time = (double) (end_time.QuadPart - start_time.QuadPart) / freq.QuadPart * 1000;
    cout<<"Vremya vipolneniya programmu:";
    cout<<time<<'\n';
    system("Pause");
    return 0;
}
есть програмка которая считает арифметическую прогрессию, создается N- е количество потоков заданное пользователем и каждый поток считает эту прогрессию, как сделать что бы эта прогрессия разбивалась на части, и каждый поток обрабатывал свою часть, и результаты каждого потока перемножались
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 01:52     Разбить подсчет арифметической прогрессии на несколько потоков
Посмотрите здесь:

C++ Заполнить массив первыми 10 членами арифметической прогрессии с известным первым членом прогрессии А и разницей Р.
C++ Вычисления n-го члена арифметической прогрессии
Вывести первые 10 членов арифметической прогрессии C++
C++ Вычисление арифметической прогрессии
Найти сумму членов арифметической прогрессии C++
C++ Найти сумму членов арифметической прогрессии
Построить заданное количество арифметической прогрессии C++
C++ Перемножить две матрицы, причем запустить подсчет в несколько потоков
C++ Thread разбить программу в несколько потоков
C++ Являются ли числа элементами арифметической прогрессии
Заполнение массива членами арифметической прогрессии C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru