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

Потоки, мьютекс и семафор

12.12.2013, 20:03. Показов 1706. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот задание: Выполнить индивидуальное задание параллельным алгоритмом (обязательно использовать для разграничения общих ресурсов мьютексы или семафоры, события, критически секции, таймеры);
Индивидуальное задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле;

Не понимаю как выполнить и как должно работать. Можете обьяснить всё по полочкам или же сделать, по коду разберусь.. Вот сделаное Индивидуальное задание:

C++ (Qt)
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <time.h>
 
using namespace std;
 
 
void proc(string s_sl)
{
    ifstream f_text("text.txt");
    string s_text;
    while(f_text >> s_text)
    {
        if((*(s_text.end() - 1) == ',') || (*(s_text.end() - 1) == '.') || (*(s_text.end() - 1) == ';') || (*(s_text.end() - 1) == ':'))
        {
            s_text.erase(s_text.end() - 1);
        }
        if(s_sl == s_text)
        {
            cout<<"Слово: " << s_sl;
            cout <<"\n";
            break;
        }
    }
    f_text.clear();
    f_text.seekg(0);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    clock_t time;
    time = clock();
 
    setlocale(LC_ALL, "");
 
    
    ifstream f_sl("slova.txt");
    if(f_sl)
    {
      string s_sl;
      while(f_sl >> s_sl)
      {
          if((*(s_sl.end() - 1) == ',') || (*(s_sl.end() - 1) == '.') || (*(s_sl.end() - 1) == ';') || (*(s_sl.end() - 1) == ':'))
          {
              s_sl.erase(s_sl.end() - 1);
          }
 
          proc(s_sl);
      }
 
      time = clock() - time;
      cout <<"Время выполнения: " << (double)time/CLOCKS_PER_SEC;
      cout <<" сек.\n";
    }
    else cerr<<"Error";
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2013, 20:03
Ответы с готовыми решениями:

Мьютекс в C++
Здравствуйте! Помогите пожалуйста написать взаимодействие двух процессов(желательно через...

Мьютекс
Пытюсь изменить задачу под ту что дана во вложении, нужна помощь #include &lt;iostream&gt; #include...

Симофор, мьютекс
https://www.cyberforum.ru/attachment.php?attachmentid=975322&amp;stc=1&amp;d=1540389708 П.5.18.Правил ...

Синхронизация мьютекс
Привет, на данный момент пытаюсь научиться пользоваться синхронизацией. Есть такой код: #include...

1
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.12.2013, 22:39 2
Лучший ответ Сообщение было отмечено Vla00 как решение

Решение

Не по теме:

И что ваш код имеет общего с параллельным выполнением?


Параллельно тут можно разве что файлы читать для подготовки данных. А все пересекающиеся слова можно найти с помощью set_intersection. Что то вроде такого кода:
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
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
#include <set>
#include <future>
#include <algorithm>
#include <windows.h>
 
std::set<std::string> get_all_words(std::string const& file)
{
   using input = std::istream_iterator<std::string>;
   std::ifstream ifs(file.c_str());
   if (!ifs.is_open()) throw std::logic_error(std::string("can't open file ") + file + ".\n");
   return std::set<std::string> {input(ifs), input()};
}
 
int main()
{
   SetConsoleCP (1251); SetConsoleOutputCP (1251);
 
   std::string file1 = "D:/where.txt", file2 = "D:/what.txt";
 
   try {
      auto f1 = std::async(get_all_words, file1);
      auto f2 = std::async(get_all_words, file2);
 
      std::set<std::string> words {f1.get()}, finding_words {f2.get()};
 
      std::set_intersection(words.begin(), words.end(),
                            finding_words.begin(), finding_words.end(),
                            std::ostream_iterator<std::string>(std::cout, "\n"));
   }
   catch (std::logic_error& e) {std::cerr << e.what();}
   catch (...) {std::cerr << "some uknown error.\n";}
 
   std::cout << "\n\nDone." << std::endl;
   return 0;
}
0
12.12.2013, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2013, 22:39
Помогаю со студенческими работами здесь

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода,...

Не получается открыть семафор. GetLastError 5
Пишу программу Парикмахерская. Она подразумевает использование семафоров. Первые 4 семафора...

Межпроцессорный мьютекс linux
Вопрос. В Windows при создании мьютекса CreateMutexA(NULL,false,&quot;NameOfMyMytex&quot;) - создаётся...

Мьютекс в чем ошибка
Пытаюсь разобраться с мьютексом. Первым делом пытаюсь определить копия запущена приложения или нет....


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

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