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

Потокобезобасный синглтон - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Межпроцессный обмен информацией через файлы http://www.cyberforum.ru/cpp-beginners/thread1051213.html
Коротко: есть информация разного типа, стоит ли для каждой заводить отдельный файл или засунуть всё в один и использовать какие-либо маркеры? п.с. изначально был второй вариант, начал подумавыть о первом, т.к. легче реализовать, да и код уже начинает сильно расти с этими маркерами
C++ Объясните, что происходит во второй строке цикла Объясните, пожалуйста, подробно, как работает вторая строка. {for (int i = 0; i<n; i++) // Цикл. a = rand() % 11 - 5;} http://www.cyberforum.ru/cpp-beginners/thread1051201.html
C++ Сжать массив, удалив из него элементы, имеющие одинаковые старшую и младшую цифры
Вот как я пытался сделать это #include <iostream> using namespace std; int main() { int n,i,j,y,x; int massiv;
Запись объектов в файл C++
Существует класс #include <string> #include <iostream> using namespace std; #pragma once class BD { private: string ClientName,ClientSurname,ClientPatr,ClientAddress,BankName,Country; int ClientDeposit,BankPercenage; public:
C++ написать класс с реализацией обыкновенных дробей с выделенной частью http://www.cyberforum.ru/cpp-beginners/thread1051162.html
написать класс с реализацией обыкновенных дробей с выделенной частью. Перегрузка операции сложения "+", потокового ввода и вывода. с конструктором и деструктором. Ограничение: наследование. Вывод сумма. Как его написать, знаю примерно как с дробями а с целой частью проблема( Называйте темы информативно. Замечание уже не в первый раз.
C++ Формирование одномерного массива из сумм элементов каждой строки матрицы, кратных числу k Все, вроде, правильно, но выводит только первый элемент попавший в if. #include <conio.h> #include <iostream> using namespace std; int main() { подробнее

Показать сообщение отдельно
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
21.12.2013, 21:05     Потокобезобасный синглтон
Имеется следующий драфт синглтона с отложенной инициализацией:
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
class NormPool;
typedef std::shared_ptr<NormPool> PNormPool;
 
class NormPool
{
public:
    ~NormPool() { std::cout<<"destroy NormPool singleton\n"; }
    
    static void addRecord(int key, const std::string& value)
    {
        //Как сделать  эту инициалзицию потокобезопасной? 
        if(itself == nullptr) 
        {
            PNormPool temp(new NormPool);
            std::swap(temp, itself);
        }
        
        //это замочек для вставки пары в мапу. Правильно ли сделано?
        {
            boost::mutex::scoped_lock lock(itself->insert_mutex);
            itself->_mp[key] = value;
        }
    }
    
private:
    NormPool() { std::cout<<"create NormPool singleton\n"; }
    NormPool(const NormPool& other) { }
    NormPool& operator = (const NormPool& other) { }
    
    static PNormPool itself;
    boost::mutex insert_mutex;
    std::map<int, std::string> _mp;
};
 
PNormPool NormPool::itself = nullptr;
Первый раз пытаюсь написать потокобезопасный код, поэтому у меня большая просьба к опытным людям - помогите сделать потокобезопасным блок инициализации
C++
1
2
3
4
5
 if(itself == nullptr) 
 {
      PNormPool temp(new NormPool);
      std::swap(temp, itself);
 }
а также корректно ли сделан замок для операции вставки?
Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru