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

Многозадачность в Unix - C++

Восстановить пароль Регистрация
 
mcpetters
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 11
22.11.2013, 17:36     Многозадачность в Unix #1
Написать систему из нескольких независимых процессов, вычисляющих гипотенузу по двум катетам. Процессы должны отображать на экране ход своего выполнения в виде отладочных сообщений. Система должна состоять из: главного процесса, принимающего с клавиатуры исходные данные и выводящего на экран результат; нескольких служебных процессов, способных по отдельности выполнять элементарные арифметические действия - сложение, вычитание, умножение, деление, вычисление квадратного корня и т.п. При этом использовать способ синхронизации - мьютексы и способ передачи данных между процессами - разделяемая память.
Ребята, хелп!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.11.2013, 17:42     Многозадачность в Unix #2
Цитата Сообщение от mcpetters Посмотреть сообщение
Ребята, хелп!
Хелп-то хелп, а вопрос где?
Добавлено через 3 минуты
Цитата Сообщение от mcpetters Посмотреть сообщение
и способ передачи данных между процессами - разделяемая память.

Не по теме:

ммм, надо было дочитать

programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.11.2013, 20:40     Многозадачность в Unix #3
Не знаю, правильно или нет, это моя первая попытка написать многопоточное приложение.

C++
    // c++ mtx.cpp -omtx -lpthread -std=c++11
 
    #include <iostream>
    #include <thread>
    #include <mutex>
    #include <cmath>
    #include <unistd.h>
    using namespace std;
 
    mutex mtx;
    float kat1, kat2, gip;
    int bk = 0;
 
    // считаем квадрат катета
    void foo(int k, float &kat)
    {
        mtx.lock(); 
        cout << "вычисляется квадрат катета...\n";
        kat = k * k;
        bk++;
        mtx.unlock();
    }
 
    // считаем гипотенузу
    void goo()
    {
        while(bk != 2) // ждем когда катеты подсчитаются
            usleep(100);
            
        mtx.lock();
        cout << "вычисляется гипотенуза...\n";
        gip = pow(kat1 + kat2, 0.5);
        mtx.unlock();
    } 
 
 
 
    int main()
    {
        cout << "Введите первый катет (целое число): ";
        cin >> kat1;
        cout << "Введите второй катет (целое число): ";
        cin >> kat2;
        
        thread th1( foo, kat1, ref(kat1) );
        thread th2( foo, kat2, ref(kat2) );
        thread th3( goo );
        
        th1.join();
        th2.join();
        th3.join();
        
        cout << "Гипотенуза равна " << gip << endl;
    }
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.11.2013, 23:23     Многозадачность в Unix #4
Цитата Сообщение от mcpetters Посмотреть сообщение
Ребята, хелп!
Окей.

Не по теме:

Я толстый и зелёный, да.


Цитата Сообщение от mcpetters Посмотреть сообщение
нескольких независимых процессов
man 2 fork
Цитата Сообщение от mcpetters Посмотреть сообщение
способ синхронизации - мьютексы
man 3 pthread_mutexattr_setpshared
Цитата Сообщение от mcpetters Посмотреть сообщение
разделяемая память
man 3 shm_open
man 2 mmap
Yandex
Объявления
22.11.2013, 23:23     Многозадачность в Unix
Ответ Создать тему
Опции темы

Текущее время: 16:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru