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

Storage durations - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Множественное наследование http://www.cyberforum.ru/cpp-beginners/thread1787242.html
Доброго времени суток. Есть ряд операций. Логически операции делятся на группы ( к примеру, запрос, ответ, чтение из буфера и .п.). В зависимости от группы, появляется специализация ( у всех операций есть общие черты (наличие имени операции), общий метод, но у каждой группы есть свои спец. методы...к примеру, сформировать запрос). В двух разных местах кода нужно обращаться к классам , как к...
C++ Полицейские-рекруты Недавно в вашем городе открылось отделение полиции. Сейчас идет набор кадров для работы в новом отделении. А тем временем, преступления все совершаются в городе. Достоверно известно, что один полицейский может расследовать только одно преступление за всю свою жизнь. Если преступление произошло в тот момент, когда в отделении полиции не было ни одного незанятого преступлениями полицейского, то... http://www.cyberforum.ru/cpp-beginners/thread1787237.html
Найти число, не входящее в заданную последовательность натуральных чисел C++
Прошу помочь решить. Задано число N и последовательность из N-1 натуральных чисел. Все числа лежат в диапазоне и не повторяются. Это означает, что существует единственное число из , которого нет в последовательности. Найти его. Для полного балла найдите линейное решение (количество действий пропорционально N, а не, скажем, квадрату N) Вход 7 6 1 2 5 7 4 10 2 3 4 1 8 9 5 6 10
C++ Вывести результат последовательного применения циклического сдвига вправо заданной последовательности k раз
Циклическим сдвигом вправо последовательности называется последовательность, получаемая из исходной перемещением последнего элемента в начало. Заданы числа N и k и последовательность целых чисел длины N. Вывести результат последовательного применения циклического сдвига вправо данной последовательность ровно k раз. Вход 5 2 1 2 3 4 5 6 1 7 1 7 2 6 1 5 5
C++ Распечатать все индексы вхождения числа х в последовательность а, начиная с последнего http://www.cyberforum.ru/cpp-beginners/thread1787231.html
Задана длина N последовательности целых чисел a и сама последовательность. После этого задается некоторое число х. Распечатать все индексы вхождения числа х в последовательность а, начиная с последнего. Если искомый элемент в последовательности вовсе отсутствует, вывести -1. В этой задаче элементы нумеруются с единицы! Вход 5 1 2 3 4 5 2 10 1 2 3 4 5 6 1 1 2 1 1
C++ Выяснить является ли заданная последовательность строго возрастающей, строго убывающей, или ни тем и ни другим На вход программы дается целое положительное число N большее единицы (N>1) и последовательность из N целых чисел. Написать Ascending, если последовательность строго возрастающяя, Descending, если последовательность строго убывающая и Neither, если ни то, ни то. Вход 5 1 2 5 7 9 6 1 1 2 5 7 9 подробнее

Показать сообщение отдельно
hoggy
5030 / 2113 / 403
Регистрация: 15.11.2014
Сообщений: 4,797
Завершенные тесты: 1
28.07.2016, 23:04     Storage durations
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
разве объект log не пишет в файл
это от реализации зависит.

что мешает каждому треду лить в свой собственный файл,
например?

мне вообще вот такая реализация нравится:
на каждый тред лог подымает отдельный процесс.
и сливает данные этому процессу.
в случае гибели приложения,
порожденные таким образом процессы остаются в живых.
и переданные данные не теряются.

далее процессы доставляют полученные данных в базу данных.

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

Добавлено через 17 минут
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вот так можно перемешать данные
да это как раз таки не проблема.
для этого даже паттерн существует:
"атомарный вывод данных"

проблема в том, что атомарный вывод - это на самом деле анти-паттерн.
потому что провоцирует бешенную конкуренцию за общий ресурс,
из-за чего возникает узкое горлышко:

http://rextester.com/CRYH17410


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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <sstream>
#include <vector>
#include <thread>
#include <mutex>
 
namespace detail{
 
    #define dFOR__(char_) \
        typename std::enable_if< std::is_same<typename T::char_type, char_>::value,
 
    #define THIS_OBJECT__(obj_) \
        decltype(obj_)>::type& { return obj_; }
 
    template<class T> auto ostream__() -> dFOR__(char) 
        THIS_OBJECT__(std::cout);
 
    template<class T> auto ostream__() -> dFOR__(wchar_t) 
        THIS_OBJECT__(std::wcout);
 
    #undef THIS_OBJECT__
    #undef dFOR__
 
}//detail
 
template<class T> class AtomicStream
{
    typedef std::mutex 
        mutex_t;
 
    typedef std::basic_ostringstream<typename T::char_type>
        accumulator_t;
public:
    AtomicStream(T& s = detail::ostream__<T>() )
        : mMutex(), mStream(), mDst(s){}
 
   ~AtomicStream(){
        mMutex.lock();
        mDst << mStream.str();
        mMutex.unlock();
    }
 
    template<class U> accumulator_t& operator << (U&& v) { 
        return mStream << v, mStream;
    }
private:
    mutex_t       mMutex;
    accumulator_t mStream;
    T&            mDst;
};
 
typedef AtomicStream<std::ostream>
    AStream;
typedef AtomicStream<std::wostream>
    WAStream;
 
 
 
//------------------------------------------------------
 
 
void atomic_print(const std::string& name, const size_t indx)
{
    AStream() << "thread(" << std::this_thread::get_id() << ") "<< name
        << " printing: " << indx 
        << std::endl;
}
 
void threadFunction(const std::string& name)
{
    for(size_t n=0;n<20; ++n)
        atomic_print(name, n);
}
 
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    const char* names[] = { "one", "two", "foo", "bar", "baz" };
    
    std::vector<std::thread> threads;
    for(size_t n=0; n< 5; ++n)
        threads.emplace_back(&threadFunction, names[n] );
 
    for(size_t n=0; n<5; ++n)
        threads[n].join();
    
    AStream() << "finished!"<<std::endl;
}
Добавлено через 1 минуту
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
а тут "Эврика" - возможность создать свои "глобальные" переменные для каждого потока).
Может я конечно и не прав...
нет. вы именно что правы.

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