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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
#1

вычислить значения одной и той-же функции с разными значениями, в несколько потоков - C++

16.01.2014, 16:05. Просмотров 576. Ответов 11
Метки нет (Все метки)

Есть задача, вычислить значения одной и той-же функции с разными значениями, которые известны изначально, в несколько потоков и вывести результат на экран и в файл. В какую сторону копать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 16:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вычислить значения одной и той-же функции с разными значениями, в несколько потоков (C++):

Найти значения функции F(x) в указанных точках x(j) и сравнить с точными значениями f(x(j))-F(x(j)) - C++
Всем привет, вот такой вопрос почему при выделении памяти динамически её не хватает при больших н? просто задание есть с графиком,...

Вычислить значения функции F на интервале от начального значения до конечного значения - C++
Написать консольное приложение на С++ Перепечатайте пожалуйста текст задания на форум.

Вывод результатов работы потоков разными цветами - C++
Реализую параллельную сортировку методом Шелла. При этом нужно показать, какие перестановки какой из потоков выполнил, разукрасив строки...

Как создать 100 массивов разными значениями ? - C++
вот фрагмент кода! Подскажите плс //while(KolMas < MaxMas) //{ for(int i = 0; i < straka; i++) { for(int...

Одновременный вывод из одной и той же бд строки но с разными условиями - MySQL
Доброго времени формучане есть скрипт вывода строк $result = mysql_query("SELECT * FROM sms WHERE komu='$db_id' AND author='$ot' ORDER BY...

Как сформировать несколько массивов с разными значениями - C#
не пойму, почему формирует два одинаковых массива? class Program { static void vvod(int x, int n, int m) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ev[G]eN
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
16.01.2014, 16:06 #2
ничего не понял..
ну поток вывода на экран: std::cout << result << std::endl;
в файл: outputFile << result << std::endl;
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.01.2014, 16:09  [ТС] #3
нужно считать значения функции в несколько потоков и по мере окончания каждого счета выводить значения на экран и в файл
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
16.01.2014, 16:13 #4
нужно считать значения функции в несколько потоков
Вы имеете ввиду threeds ?
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.01.2014, 16:15  [ТС] #5
да, их. Невнятно сформулировал вопрос, сорри.
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
16.01.2014, 16:20 #6
да, их. Невнятно сформулировал вопрос, сорри.
если честно то да.
Под итожим вопрос.(на псевдокоде)
Код
result function(par)
{
   //делаем расчет с par
   return par
}

  threed t1(function(10));
  threed t2(function(20));
  threed t3(function(30));

  //что дальше ?
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.01.2014, 16:44 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <future>
#include <vector>
 
unsigned long long fib(const unsigned i) { return i < 3 ? 1 : fib(i - 1) + fib(i - 2); }
 
int main()
{
    const unsigned numberOfTask = 20;
    unsigned n = 30;
    std::vector<std::future<unsigned long long>> futures(numberOfTask);
    for (auto& f : futures) f = std::async(std::launch::async, fib, ++n);
    n = 30;
    for (auto& f : futures) std::cout << "fib(" << ++n << ") = " << f.get() << "\n";
 
    return 0;
}
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.01.2014, 16:46  [ТС] #8
Цитата Сообщение от egor2116 Посмотреть сообщение
//что дальше ?
как-только закончился t1, он пишет данные на экран и в файл, тоже самое с t2, t3 и т.д.
функция с разными параметрами считают разное время(хотя, время расчета может и совпасть для каких-то параметров). Все потоки пишут в один и тот же файл.
Да, еще, нужно иметь возможность все это скопом прибить и сохранить текущие результаты.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 17:37 #9
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
#include <iostream>
#include <fstream>
#include <thread>
#include <mutex>
using namespace std;
 
mutex g_lock;
 
void threadFunction(double n, ofstream& fout)
{
    double res;
 
    // вычисления
 
    g_lock.lock();
 
    cout << "n = " << n << ' ' <<  "res = " << res << endl;
    fout << n << ' ' << res << endl;
 
    g_lock.unlock();
}
 
int main()
{
    ofstream fout("file.txt");
    thread t1(threadFunction, 2.0, ref(fout));
    thread t2(threadFunction, 3.0, ref(fout));
    thread t3(threadFunction, 4.0, ref(fout));
    t1.join();
    t2.join();
    t3.join();
 
    return 0;
}
2
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
17.01.2014, 18:41  [ТС] #10
Спасибо, а как это же сделать в 2010=й студии?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.01.2014, 19:31 #11
Цитата Сообщение от vua72 Посмотреть сообщение
а как это же сделать в 2010=й студии?
Это же - никак, там нет поддержки С++11. Используйте Win32 API.
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
24.01.2014, 10:43  [ТС] #12
MyCass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <windows.h>
 
class MyClass {
    //// поля
    // ..
    HANDLE m_write_to_file; // мютекс для синхронизации записи в файл
    ////...
    //// методы
    static DWORD WINAPI mainThread(void* ); // фукнция для реализации потоков
    DWORD runThread(); // поток
    
 
  public:
    MyClass(void);
    virtual ~MyClass(void);
    void initThreads(); //запуск потоков
};
MyClacc.cpp
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
#include "MyClass.h"
 
MyClass::MyClass(void){
    //...
    m_write_to_file = CreateMutex(NULL,false,NULL);
    
}
 
MyClass::~MyClass(void) {
 
}
/// фукнция для реализации потоков
DWORD WINAPI MyClass::mainThread(void* lpParam) {
    return ((MyClass*)lpParam)->runThread();
}
/// поток
DWORD MyClass::runThread() {
    WaitForSingleObject(m_write_to_file,INFINITE);
    ... // вывод
    ReleaseMutex(m_write_to_file);
    return 0;
}
 
///процедура для создания потков
void MyClass::initThreads {
    HANDLE *thread_handles = NULL;
    size_t sz=m_num_of_threads;
    thread_handles = new HANDLE[sz];
    for(size_t i = 0; i < sz; i++) {
        thread_handles[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mainThread, this, 0, NULL);
    }
    WaitForMultipleObjects(sz, thread_handles, TRUE, INFINITE);
    for(size_t i = 0; i<sz; i++) {
        CloseHandle(thread_handles[i]);
    }
    delete[] thread_handles;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 10:43
Привет! Вот еще темы с ответами:

Заменить каждое вхождение в одной строке разными значениями - PHP
В общем не получается решить следующую задачу: Есть файл со строками: Строка 1 Текст текст текст {Текст| текст| текс} Текст...

Вычислить значения суммы ряда и сравнить со значениями заданной функции - Pascal
Даны две действительные квадратные матрицы порядка n. Получить для каждой матрицы S=x_1-x_2+x_3-x_4+...+(-1)^{n+1}x_n где xi -...

Как примаунтить несколько дисков к одной и той же директории - RedHat, Fedora Linux
Сайт находится в папке /var/www/html/site.ru с картинками в папке /var/www/html/site.ru/images. Но все картинки не влазят в /dev/md2. ...

Как создать и загрузить несколько размеров одной и той же иконки приложения? - Delphi
Здравствуйте:) Как я понял, для корректного отображения иконки при всех размерах значков, необходимо создать набор иконок из всех...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.01.2014, 10:43
Ответ Создать тему
Опции темы

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