Описание тега double-checked-locking

Блокировка с двойной проверкой - это шаблон разработки программного обеспечения, используемый для уменьшения накладных расходов на получение блокировки путем первого тестирования критерия блокировки без фактического получения блокировки.
8 ответов

Дважды проверил блокировку в.NET

Я наткнулся на эту статью, обсуждающую, почему парадигма блокировки двойной проверки нарушена в Java. Действительна ли парадигма для.NET (в частности, C#), если объявлены переменные volatile?
0 ответов

Безопасна ли двойная проверка блокировки в C++ для однонаправленной передачи данных?

Я унаследовал приложение, которое я пытаюсь улучшить производительность, и в настоящее время он использует мьютексы (std::lock_guard<std::mutex>) передавать данные из одного потока в другой. Один поток является низкочастотным (медленным), кото…
4 ответа

Какая реализация для ленивого синглтона, инициализация которого может быть неудачной?

Представьте, что у вас есть статический метод без аргументов, который идемпотентен и всегда возвращает одно и то же значение и может выдать проверенное исключение, например, так: class Foo { public static Pi bar() throws Baz { getPi(); } // gets Pi,…
1 ответ

Двойная проверка блокировки в JAVA

Читая о DCL в Википедии, я задавался вопросом о проблеме в DCL и предлагаемом решении, или другими словами, почему volatile ключевое слово нужно? Короче говоря, проблема: использование DCL может в некоторых случаях приводить к тому, что частично ско…
1 ответ

Тройная проверка блокировки?

Таким образом, в то же время мы знаем, что двойная проверка блокировки как есть не работает в C++, по крайней мере, в переносимой форме. Я только что понял, что у меня хрупкая реализация в ленивом дереве, которое я использую для трассировки лучей ме…
2 ответа

Синглтонная реализация C++, двойная проверка блокировки

Я много слышал и читал о подходах к реализации синглтонов в C++, таких как Meyer, Phoenix и т. Д., Но все они, похоже, имели проблемы в определенных сценариях использования. Поэтому я придумал свой собственный подход к реализации, Даниэль Синглтон. …
10 ответов

Дважды проверил блокировку Артикул

Я читал эту статью о "Двойной проверке блокировки", и из основной темы статьи мне было интересно, почему в какой-то момент статьи автор использует следующую идиому: Листинг 7. Попытка решить проблему неупорядоченной записи public static Singleton ge…
1 ответ

Ищите тест для воспроизведения сломанной двойной проверенной блокировки

Кто-нибудь знает тест, который воспроизводит проблему "сломанной двойной проверенной блокировки" в Java?
27 ноя '12 в 05:45
1 ответ

Возможно (... да, верно) решено: дважды проверил блокировку на C++: новичок в указателе температуры, затем назначить его экземпляру

Это продолжение этого поста о двойной проверке блокировки. Я пишу новое сообщение, потому что кажется, что публикация продолжения "старых" сообщений не делает его таким же видимым / активным, как отправка нового сообщения, возможно, потому, что боль…
21 авг '10 в 10:38
2 ответа

Двойная проверка-блокировка гарантирует состояние объекта? (параллелизм на практике)

Я читаю параллелизм на практике и имею некоторое недопонимание.цитата: реальная проблема с DCL заключается в предположении, что худшее, что может произойти при чтении ссылки на общий объект без синхронизации, - это ошибочно увидеть устаревшее значен…
05 фев '17 в 15:31
1 ответ

Как правильно использовать Double-Checked Locking с барьером памяти в C++?

Я только что прочитал отличный блог C++ и опасности двойной проверки блокировки И я не понимаю, почему мы должны использовать первый барьер памяти в Примере 12 (как показано ниже): Singleton* Singleton::instance () { Singleton* tmp = pInstance; ... …
25 окт '18 в 03:47
1 ответ

Поточная безопасная ленивая инициализация: статический vs std::call_once vs двойная проверка блокировки

Для поточной безопасной ленивой инициализации следует предпочитать статическую переменную внутри функции, std::call_once или явную двойную проверку блокировки? Есть ли значимые различия? Все три можно увидеть в этом вопросе. Дважды проверил Lock Sin…
2 ответа

Java-коды, которые не проходят проверку двойной блокировки

Примечания: Я знаю, что до версии Java 5(выпущенной в 2004 году) двойная проверка блокировки не будет работать в Java, даже если вы добавите "volatile" в поле "instance". и после Java 5 изменчивая семантика была правильной для двойной проверки блоки…
3 ответа

Дважды проверил шаблон блокировки в C++11?

Новая модель машины C++11 позволяет надежно работать многопроцессорным системам. реорганизации инструкций. Как отметили Мейерс и Александреску, "простая" реализация шаблона блокировки с двойной проверкой небезопасна в C++03 Singleton* Singleton::ins…
2 ответа

Двойное сопоставление с HashMap

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

Двойная проверка блокировки - цель c

Я понял, что двойная проверка блокировки имеет недостатки в Java из-за модели памяти, но обычно это связано с одноэлементным шаблоном и оптимизацией его создания. Как насчет этого случая в объективе-c: У меня есть логический флаг, чтобы определить, …
07 июн '10 в 14:43
5 ответов

Двойная проверка блокировки на словаре "ContainsKey"

Моя команда в настоящее время обсуждает эту проблему. Данный код является чем-то вроде if (!myDictionary.ContainsKey(key)) { lock (_SyncObject) { if (!myDictionary.ContainsKey(key)) { myDictionary.Add(key,value); } } } Некоторые из постов, которые я…
4 ответа

Двойная проверка блокировки без летучих

Я прочитал этот вопрос о том, как сделать двойную проверку блокировки: // Double-check idiom for lazy initialization of instance fields private volatile FieldType field; FieldType getField() { FieldType result = field; if (result == null) { // First…
1 ответ

Boost upgrade_lock и DCLP (дважды проверенная схема блокировки)

Предположим, у нас есть следующий (псевдо) код: using UpgradeLock = boost::upgrade_lock<boost::shared_mutex>; using UpgradeToUniqueLock = boost::upgrade_to_unique_lock<boost::shared_mutex>; boost::shared_mutex mtx; void DeleteTable(<t…
2 ответа

Java дважды проверил блокировку - строки

При условии strings содержит поле final, означает ли это, что в контексте блокировки с двойной проверкой нет необходимости объявлять их volatile? Например class SomeClass{ private String val; String getVal(){ if(val == null){ synchronized(this){ if(…
12 ноя '15 в 12:50