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

Секундомер и thread-safe - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Описать ф-ию min(x) для определения min элемента линейного массива http://www.cyberforum.ru/cpp-beginners/thread821893.html
Описать ф-ию min(x) для определения min элемента линейного массива X введя вспомогательную рекурсивную ф-ю min(k), находящую минимум среди последних элементов массива X, начиная с k-го} program FindMin; type Mass = array of integer; function MinK(X: Mass; k: integer): integer; var Result, R: integer; begin Result := X; if k > 1 then
C++ Инициализация массива указателей в классе Доброго времени суток. Столкнулся с проблемой, не могу инициализировать массив указателей в классе: class cards { public: cards(); private: http://www.cyberforum.ru/cpp-beginners/thread821867.html
Вычисление выражения записанного в постфиксной форме C++
требуется написать процедуру вычмсления выражения в постфиксной форме,например 453+-45/+*2^3+. мой код неработоспособный(( #include <vcl.h> #pragma hdrstop #include <string.h> #include <stdio.h> #include <stack.h> #pragma argsused
C++ Ошибка с функцией
Дан текст. Найти сумму имеющихся в нем чисел. Функция отдельно работает(в качестве отдельной программы). Сама программа без функции тоже. Когда вместе склеиваю ругается при вызове функции (В программе за комментировано). IntelliSense: expression must have (pointer-to-) function type. Что от меня хочет не могу понять. Буду признателен за помощь. #include <iostream> using namespace std;...
C++ Нюансы синтаксиса: что означает символ -> (указатели) http://www.cyberforum.ru/cpp-beginners/thread821858.html
ребят подскажите что означает такой символ: -> вот пример кода: pq->arr
C++ Работа со стеком (Необходимо проверить,правильно ли расставлены скобки) Дано математическое выражение, к примеру {x+(g-*c)-(q+w)}. Необходимо проверить,правильно ли расставлены скобки. Проверять следует следующим образом:если встретилась левая скобка,помещаем ее в стек. если правая,то сравниваем ее в верхним элементом стека,если скобки соответствуют, то удаляем ее из стека. Код написала,но в нем много синтаксических ошибок(первый раз работаю со стеком),не могу... подробнее

Показать сообщение отдельно
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.03.2013, 17:22
Как по мне, то здесь можно воспользоваться обычными мютексами для защиты переменной. Если я правильно понял суть, то при запуске каждого потока к переменной нужно будет добавить количество пройденных секунд. Вот пример накидал:
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
#include <iostream>
#include <vector>
#include <thread>
#include <chrono>
#include <mutex>
 
class timer
{
    unsigned seconds_ = 0;
    mutable std::mutex m;
public:
    unsigned gettime() const 
    {
        std::unique_lock<std::mutex> lock(m);
        return seconds_;
    }
    
    void timer_on(const unsigned sec)
    {
        std::unique_lock<std::mutex> lock(m);
        auto start = std::chrono::high_resolution_clock::now();
        std::this_thread::sleep_for(std::chrono::seconds(sec));
        seconds_ += std::chrono::duration_cast<std::chrono::seconds>(std::chrono::high_resolution_clock::now() - start).count();
    }
};
 
int main() 
{
    timer my_timer;
    std::vector<std::thread> threads(10);
    for (auto& i : threads) i = std::thread(&timer::timer_on, &my_timer, 3); //запускаем 10 потоков и ждем 30 секунд
    for (auto& i : threads) i.join();  //ждем завершения потоков (в результате переменная timer::seconds_ должна быть равной 30)
    std::cout<<"total time: "<<my_timer.gettime()<<" seconds\n";
    
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru