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

Блокировка с двойной проверкой. Потоки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Error E2141 Declaration syntax error http://www.cyberforum.ru/cpp/thread1463524.html
#include<stdlib.h> #include<conio.h> #include<stdio.h> #include<cmath.h> #include<stdlib.h> #include<time.h> #include<graphics.h> #include<dos.h> void line(char s); BOK()
C++ Builder Баг в программе, не могу исправить Есть программа, работала как должно, потом попросили добавить комментарии, добавил, и стало работать как то коряво, вообще никак можно сказать. Прикрепляю 2 архива. 1 версия рабочая но без комментариев, чтобы посмотреть что все работает как надо, вторая тоже самое, но с комментариями, не знаю в чем дело, но работать перестало. Подскажите в чем дело пожалуйста. http://www.cyberforum.ru/cpp/thread1463366.html
C++ Исправить ошибку
#include<conio.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> #include<graphics.h> #include<dos.h> void line(char s); BOK() int main()
Работа с LPT портом с использованием библиотеки inpout32.dll C++
Нужно записать и считать данные с lpt порта . Делаю небольшую программку с использованием библиотеки inpout32.dll : // ConsoleApplication3.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "iostream" #include "conio.h" #include "stdlib.h" #include "h.h"
C++ Конвертация картинки из 24bit в 8bit http://www.cyberforum.ru/cpp/thread1462151.html
Здравствуйте. Нужно написать программу для конвертации изображение из 24bit в 8bit. Подскажите в каком направление двигаться, или какой алгоритм использовать. Может есть какой нибудь сайт или книжка по этой теме. Может у кого то есть готовый код. Спасибо.
C++ Перестала работать дозапись в файл Написал программу. Открыл ее через 3 недели и обнаружил,что не работает дозапись в файл. В чем может быть причина и как ее исправить? подробнее

Показать сообщение отдельно
elch10
37 / 20 / 3
Регистрация: 27.04.2015
Сообщений: 160
Завершенные тесты: 2
31.05.2015, 09:07     Блокировка с двойной проверкой. Потоки
Цитата Сообщение от Mr. Hat Посмотреть сообщение
В учебнике Энтони Уильямса "Параллельное программирование на C++" описана проблема при использовании блокировки с двойной проверкой (Double-Checked Locking), из-за которой в стандарт C++11 ввели функцию std::call_once. Не могу понять ее суть. А объясняется она на таком примере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::shared_ptr<some_resource> resource_ptr;
std::mutex resource_mutex;
void undefined_behaviour_with_double_checked_locking()
{
   if(!resource_ptr)  (1)
   {
       std::lock_guard<std::mutex> lk(resource_mutex);
       if(!resource_ptr) (2)
       {
            resource_ptr.reset(new some_resource);
       }
   }
   resource_ptr->do_something();  (3)
}
В книге написано: "...возникает гонка, угрожающая не самому указателю, а объекту, на который он указывает; даже если один поток видит, что указатель инициализирован другим потоком, он может не увидеть вновь созданного объекта some_resource, и, следовательно, вызов do_something() будет применен не к тому объекту..."
Та же самая проблема! Ведь этот код должен работать, объясняю почему: если указатель нулевой, то он не инициализирован, тогда захватывается мьютекс и происходит инициализация. Если в данный момент работает другой поток то он может не заметить, что указатель инициализирован в проверке (1), но тогда он будет ждать пока мьютекс освободится от 1 потока. После того как мьютекс освободился 2 поток может продолжить свою работу, но тогда указатель будет уже инициализирован, и проверка (2) уже никогда не будет true, то есть проверка(2) получит false и код внутри проверки (2) не выполнится, далее произойдёт освобождение мьютекса и выход из проверки (1), после чего вызовется функция do_something(). Какая может здесь быть проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru