Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 9
1

Написать программу с двумя потоками

18.04.2018, 09:54. Показов 2847. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравствуйте дорогие программисты. Обращаюсь к вам всемогущим ибо я в отчаянии. Нужно написать программу с двумя потоками, один из которых должен находить все простые числа(с диапазона допустим от 2 до 54), а другой выводить их на экран. Так как в интернете толковой информации о потоках я не нашёл решил обратится за помощью к знающим.
Спасибо за внимание.
P.S Если будет нужно скину программу которая находит простые числа, только без потоков.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2018, 09:54
Ответы с готовыми решениями:

Написать программу з потоками
Написать программу, в которой сформировать два вектора со значениями типа int. В первом векторе...

Реализовать программу, в которой происходит суммирование массива двумя потоками
Здравствуйте. Мне нужна Ваша помощь. Задача следующая: реализовать программу, в которой происходит...

Написать программу з потоками
Написать программу, в которой сформировать два вектора со значениями типа int. В первом векторе...

Написать программу с потоками
Написать программу, в которой сформировать два вектора со значениями типа int. В первом векторе...

2
585 / 488 / 371
Регистрация: 05.11.2013
Сообщений: 1,265
Записей в блоге: 6
18.04.2018, 10:39 2
Лучший ответ Сообщение было отмечено Dinozavrik_Recs как решение

Решение

ну вот например прога ищет и выводит в консоль простые числа, используя потоки, поразбирайся и адаптируй (консоль Studio 2015)
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
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
#include <functional>
#include <fstream>
#include <cmath>
 
using namespace std;
mutex mtx;
 
void writePrimesToFile(unsigned int begin, unsigned int end)
{
 for (unsigned int i = begin; i <= end; i++)
 {
  for (unsigned int j = 2; j < i; j++)
  {
   if (i % j == 0)
   {
    break;
   }
   else if (j + 1 == i)
   {
    mtx.lock();
    cout << i << endl;
    mtx.unlock();
   }
  }
 }
}
 
void callWritePrimesMultipleThreads(unsigned int begin, unsigned int end, unsigned int N)
{
 clock_t startTimer, stopTimer;
 
 startTimer = clock();
 
 vector<thread> arr;
 unsigned int each = end / N;
 unsigned int start = begin;
 unsigned int finish = start + each - 1;
 for (unsigned int i = 0; i < N; i++)
 {
  arr.emplace_back(writePrimesToFile, start, finish);
  start += each;
  finish += each;
 }
 for (auto& thread : arr)
 {
  thread.join();
 }
 
 stopTimer = clock();
 cout << "The time that takes is: " << (double)(stopTimer - startTimer) / CLOCKS_PER_SEC << endl;
}
 
 
int main()
{
 callWritePrimesMultipleThreads(1, 1000, 100);
 cin.get();
 return 0;
}
1
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
19.04.2018, 08:23 3
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
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <atomic>
 
 
std::mutex mtx1, mtx2;
std::condition_variable cv1, cv2;
int pn;
std::atomic<bool> cont = true, printReady = false;
 
// возвращает true если n - простое
bool prime(int const n) 
{
    bool ret = true;
    for (int i = 2; i * i <= n; ++i)
    {
        if (n % i == 0)
        {
            ret = false;
            break;
        }
    }
    return (n == 1 ? false : ret);
}
 
// ищет все простые в интервале от beg до end
void search(int const beg, int const end)
{
    while (!printReady)
    {
        std::this_thread::yield();
    }
    for (int i = beg; i <= end; ++i)
    {
        if (prime(i))
        {
            while(!mtx2.try_lock())
            {
                std::this_thread::yield();
            }
            mtx2.unlock();
            pn = i;
            std::unique_lock<std::mutex> lck(mtx1);
            cv2.notify_one();
            cv1.wait(lck);
        }
    }
}
 
void print()
{
    while (cont)
    {
        std::unique_lock<std::mutex> lck(mtx2);
        if (cont && pn != 0)
        {
            std::cout << pn << "  ";
        }
        printReady = true;
        cv1.notify_one();
        cv2.wait(lck);
    }
}
 
 
int main()
{
    std::thread ts(search, 2, 10000);
    std::thread tp(print);
    ts.join();
    cont = false;
    cv2.notify_one();
    tp.join();
}
1
19.04.2018, 08:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2018, 08:23
Помогаю со студенческими работами здесь

Написать параллельную программу для транспонирования матрицы размером 4n x 4n элементов n потоками
Написать параллельную программу для транспонирования матрицы размером 4n x 4n элементов n потоками....

Написать программу с тремя потоками: чтение из файла, возведение в квадрат, запись в файл
Нужно написать программу с 3-мя потоками: чтение из файла, возведение в квадрат, запись в файл...

Работа с двумя потоками
Задаются две маски файлов. Первая маска - это маска директорий, вторая - это маска файлов. Также...

Копирование файла двумя потоками
Доброго времени суток. Необходимо скопировать файл, файл может быть больше оперативной памяти....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru