С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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 натуральных чисел. Все числа лежат в диапазоне и не повторяются. Это означает, что существует единственное число из , которого нет...
C++ Вывести результат последовательного применения циклического сдвига вправо заданной последовательности k раз
Циклическим сдвигом вправо последовательности называется последовательность, получаемая из исходной перемещением последнего элемента в начало. Заданы числа N и k и последовательность целых чисел...
C++ Распечатать все индексы вхождения числа х в последовательность а, начиная с последнего http://www.cyberforum.ru/cpp-beginners/thread1787231.html
Задана длина N последовательности целых чисел a и сама последовательность. После этого задается некоторое число х. Распечатать все индексы вхождения числа х в последовательность а, начиная с...
C++ Выяснить является ли заданная последовательность строго возрастающей, строго убывающей, или ни тем и ни другим На вход программы дается целое положительное число N большее единицы (N>1) и последовательность из N целых чисел. Написать Ascending, если последовательность строго возрастающяя, Descending, если... подробнее

Показать сообщение отдельно
hoggy
6724 / 2909 / 499
Регистрация: 15.11.2014
Сообщений: 6,550
Завершенные тесты: 1
28.07.2016, 23:04
Цитата Сообщение от 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 Посмотреть сообщение
а тут "Эврика" - возможность создать свои "глобальные" переменные для каждого потока).
Может я конечно и не прав...
нет. вы именно что правы.

в этом вся суть идеи - глобальные переменные,
свои для каждого потока.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.