0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 27
1

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

28.10.2018, 19:41. Показов 247. Ответов 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
#include"stdafx.h"
#include<iostream>
#include<windows.h>
#include<string>
#include<io.h>
#include<thread>
#include<mutex>
#include<fstream>
using namespace std;
 
int _nextOrder = 0;
mutex _m;
 
bool lock(int currentOrder)
{
    for (;;)
    {
        _m.lock();
 
        if (_nextOrder == currentOrder)
            break;
 
        _m.unlock();
    }
 
    return false;
}
 
void unlock(int nextOrder)
{
    _nextOrder = nextOrder;
    _m.unlock();
}
 
void func(ifstream &file, mutex &mtx, int len, const  string & name)
{
    string str;//строковая переменная
    while (!file.eof())//проверочка на наличие строк 
    {
        mtx.lock(); //Блокирует мьютекс
        for (int i = 0; i < len; i++) // len - сколько строк должно быть выведено
        {
            if (!getline(file, str))  //Получение строки из файла
                break;
 
            cout << name << str << endl;//Вывод
        }
        mtx.unlock(); //Разблокирует мьютекс
        Sleep(1000);//приостановка программы
    }
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");//Подключение русского языка
    mutex mtx; //Переменная типа мьютекс
    ifstream file("1.txt"); //Открытие файла для чтения строк
    
    if (!file.is_open())//проверка наличия файла
 
        cout << "Файл не существует!";
    else if (file.peek() == EOF)//проверка на наличие строк
        cout << "Файл пуст!";
    else
    {
        
        thread t(func, ref(file), ref(mtx), 3, "\tДочерний поток: ");
        
        func(file, mtx, 2, "Родительский поток: ");
        t.join();
    }
    file.close();//закрытие файла
    cout << endl;
 
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2018, 19:41
Ответы с готовыми решениями:

Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй
Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй...

Как приостановить потоки, чтобы потом они начали работать с того места, на котором остановились?
помогите пожалуйста!!! есть два потока, которые действуют одновременно. как их приостановить,...

Как сделать чтобы на один из элементов не действовали правила CSS
Такая ситуация друзья у меня есть &lt;div id=&quot;111&quot;&gt; в нём есть элементы и мне надо что бы на один из...

Как синхронизировать потоки?
Разбираюсь с legacy-кодом. Наткнулся на такой фрагмент в фоновом потоке: private void...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2018, 19:41
Помогаю со студенческими работами здесь

Как синхронизировать потоки?
Есть метод с параметрами, данный метод будет использоваться в трех разных потоках. Параметры...

Подскажите пожалуйста, как подключить функции password_hash() и hash_equals(), а то, у меня они не определены
Здравствуйте! У меня на хостинге и на денвере, не поддерживаются как минимум 2 функции ...

Как правильно синхронизировать потоки?
По нажатию кнопки создается N потоков (в данном случае 5): Thread threads = new Thread; ...

Как синхронизировать потоки и окно ShowDialog?
Здравствуйте, только начинаю осваивать C# .NET. В процессе написания приложения windows forms...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru