Главная » Статьи для тега "блокировки"

Как избежать взаимоблокировок в Visual C# (Sharp)

Добавлено Дата: 7 March, 2014 категория: C#

При взаимоблокировке (deadlock) исполнение кода прекращается. Взаимоблоковка происходит, когда один поток удерживает блокировку и ожидает информию от другого потока. Но другой поток не может предоставить эту информацию первому, т. к. он ожидает получить блокировку.

Читать »

Основы программирования графики – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

Добавлено Дата: 3 September, 2013 категория: Программирование игр под Android

Android предлагает нам два больших API для прорисовки экрана. Один из них используется в основном для программирования 20-графики, второй – для аппаратно ускоренного 3D. В этой и следующей главах мы сфокусируемся на разработке 20-графики с помощью Canvas API, являющегося, по сути, качественной оберткой для библиотеки Skia и подходящего для большинства сложных 2D-nrp. Однако прежде чем этим заняться, нам необходимо прояснить для себя два аспекта: переход в полноэкранный режим и защиту от блокировки.

Читать »

СРЕДСТВА блокировки ЯЗЫКА SQL

Добавлено Дата: 27 August, 2012 категория: SQL, Базы данных

В стандарте SQL не предусмотрены какие-либо явно заданные средства блокировки; фактически в нем вообще не упоминается блокировка как таковая12.  Но этот стандарт требует, чтобы в его реализации были предусмотрены обычные  гарантии, касающиеся взаимного вмешательства (или, скорее, его отсутствия) между одновременно выполняемыми транзакциями. Что еще более важно, в этом стандарте требуется, чтобы обновления, внесенные любой конкретной транзакцией Т1, не становились бы доступными для любой другой транзакции Т2  до тех пор (или только после того), пока не произойдет фиксация транзакции Т1.

Читать »

БЛОКИРОВКА

Добавлено Дата: 24 August, 2012 категория: SQL, Базы данных

Как было указано в разделе 16.1, все проблемы, описанные в разделе 16.2, могут быть устранены с помощью механизма управления параллельным выполнением, называемого блокировкой. В его основе лежит простая идея — если для некоторой транзакции А требуется гарантия, чтобы определенный объект, в котором она заинтересована (как правило, кортеж базы данных), не изменился каким-то образом без ее ведома (как описано выше), она приобретает блокировку на этот объект (как принято называть соответствующую операцию). Неформально выражаясь, следствием приобретения блокировки является то, что к рассматриваемому объекту, условно говоря, "блокируются доступ других транзакций", и поэтому, в частности, предотвращается возможность внесения ими изменений. Благодаря этому транзакция А может продолжать свои операции обработки в полной уверенности в том, что рассматриваемый объект останется в определенном состоянии до тех пор, пока он требуется для этой транзакции.

Читать »

НАМЕЧЕННЫЕ БЛОКИРОВКИ

Добавлено Дата: 20 July, 2012 категория: SQL, Базы данных

До этого времени в основном предполагалось, что единицей измерения объема данных, применяемых в целях блокировки, является отдельный кортеж. Но, в принципе, нет никаких оснований, по которым блокировки нельзя было бы применять к большим или меньшим единицам данных, например, ко всей переменной отношения, или даже ко всей базе данных, или (переходя в другую крайность) к отдельному компоненту конкретного кортежа. В данном случае  речь  идет о степени детализации блокировки [16.10], [16.11]. Как и обычно, здесь приходится идти на компромисс, поскольку чем тоньше детализация, тем больше степень распараллеливания, а чем она грубее, тем меньше блокировок приходится устанавливать и проверять, что способствует также снижению издержек. Например, если транзакция установила блокировку X на всю переменную отношения, то нет необходимости устанавливать блокировки X на отдельных кортежах в этой переменной отношения; с другой стороны, ни одна из  параллельно выполняемых транзакций вообще не сможет получить каких-либо блокировок на данной переменной отношения или на кортежах в этой переменной отношения.

Читать »

ДАЛЬНЕЙШЕЕ ОПИСАНИЕ ПРОБЛЕМЫ ВОССТАНОВЛЕНИЯ

Добавлено Дата: 15 July, 2012 категория: SQL, Базы данных

Если применяется последовательный график, то очевидно, что отдельные транзакции в нем являются восстанавливаемыми, поскольку любая из таких транзакций в случае необходимости всегда может быть отменена и/или выполнена повторно с использованием методов, описанных в предыдущей главе. Но далеко не очевидно, продолжают ли транзакции оставаться восстанавливаемыми, если для них разрешено выполнение с чередованием  операций. В действительности проблема зависимости от незафиксированного выполнения, описанная в разделе 16.2, может стать причиной нарушения восстанавливаемости, как будет показано в данном разделе.

Читать »

Критические участки и состояние конкуренции за ресурсы – ЧАСТЬ 2

Добавлено Дата: 16 May, 2012 категория: Ядро Linux

Вначале кажется, что описанная ситуация не имеет  простого решения. Как  можно предотвратить чтение очереди на  одном  процессоре в тот  момент, когда  другой  процессор обновляет ее?  Вполне логично аппаратно реализовать простые инструкции, такие  как  атомарные арифметические операции  или  операции сравнения, тем  не менее  было  бы  смешно аппаратно реализовывать критические участки  неопределенного  размера, как  в приведенном примере. Все что нужно  — это  предоставить метод, который позволяет отметить начало  и конец; критического участка, и предотвратить или  заблокировать  (lock)  доступ  к этому  участку, пока  другой  поток  выполняет его.

Читать »

Взаимная блокировка

Добавлено Дата: 28 April, 2012 категория: Java

Если вы имеете дело с двумя потоками и с двумя блокируемыми объектами, может возникнуть ситуация взаимной блокировки (deadlock), при которой каждый объект дожидается снятия блокировки с другого объекта. Представим себе, что объект X содержит синхронизированный метод, внутри которого вызывается синхронизированный метод объекта Y, который, в свою очередь, также содержит синхронизированный метод для вызова синхронизированного метода объекта X. Каждый объект ждет, пока с другого объекта не будет снята блокировка, и в результате ни один из них не работает. Подобная ситуация иногда называется “смертельными объятиями” (deadly embrace). Рассмотрим сценарий, в соответствии с которым объекты jareth и cory относятся к некоторому классу Friend ly:

Читать »

Конфликт при захвате блокировки имасштабируемость

Добавлено Дата: 23 April, 2012 категория: Ядро Linux

Термин "конфликт при захвате блокировки" (lock contention, или просто contention) используется для описания  блокировки, которая  в данный момент захвачена и на освобождение которой ожидают другие потоки. Блокировки с высоким уровнем конфликтов (highly contended) — это те, на освобождение которых всегда ожидает много потоков. Так как задача блокировок — это сериализация доступа к ресурсу, то не вызовет большого удивления тот факт,  что блокировки  снижают производительность системы.  Блокировка  с высоким  уровнем конфликтов  может стать узким местом в системе,  быстро уменьшая производительность.  Конечно,  блокировки  необходимы для того, чтобы предотвратить "развал" системы,  поэтому решение  проблемы высокого уровня конфликтов  при блокировках  также должно обеспечивать необходимую защиту от состояний  конкуренции  за ресурсы.

Читать »

BLK: Большая блокировка ядра

Добавлено Дата: 20 April, 2012 категория: Ядро Linux

Добр о  пожаловать к  "рыжему   пасынку"  ядра.   Большая  блокировка ядра   (Big Kernel  Lock, BKL)  — это  глобальная спин-блокировка,  которая была  создана специально  для  того, чтобы  облегчить переход  от первоначальной реализации SMP  n операционной системе Linux  к мелкоструктурным блокировкам. Блокировка BKL  имеет следующие интересные свойства.

Читать »

Концепция блокировок в SQL Server

Добавлено Дата: 5 April, 2012 категория: Microsoft SQL Server, Базы данных

SQL Server реализует свойство изоляции с помощью блокировок, которые защищают строки транзакций от влияния других транзакций. Блокировки SQL Server нельзя представлять себе только как состояния “страница заблокирована” и “страница разблокирована”. На самом деле все гораздо сложнее. И перед тем как начать управлять блокировками, нужно понять схему их действия.

Читать »

Секвентные блокировки

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

Секвентная блокировка (seq  lock) — это  новый тип  блокировки, который появился  в ядрах  серии   2.6.  Эти  блокировки предоставляют очень  простой механизм чтения  и  записи  совместно  используемых данных.  Работа  таких  блокировок основана на  счетчике последовательности событий.  Перед  записью рассматриваемых данных захватывается спин-блокировка,  и  значение  счетчика увеличивается на  единицу. После  записи данных  значение счетчика снова  увеличивается на  единицу, и  спинблокировка освобождается, давая  возможность записи другим  потокам. Перед  чтением  и  после  чтения данных  проверяется значение счетчика. Если  два  полученных значения одинаковы, то  во время  чтения данных  новый акт  записи не  начинался, Если  к  тому  же  оба  эти  значения четные, то  к  моменту начала  чтения акт  записи был  закончен (при  захвате  блокировки на  запись значение счетчика становится нечетным, а перед  освобождением — снова  четным, так как  изначальное значение счетчика  равно  нулю).

Читать »

Управление блокировками в SQL Server

Добавлено Дата: 26 March, 2012 категория: Microsoft SQL Server, Базы данных

Если вы уже когда-либо писали схемы блокировок на других языках баз данных для преодоления недостатка блокировок (как я), то у вас могло остаться чувство, что обязательно нужно самому заниматься блокировками. Позвольте вас заверить, что диспетчеру блокировок можно полностью доверять. Тем не менее SQL Server предлагает несколько методов управления блокировками, о которых мы детально поговорим в этом разделе.

Читать »

Методы wait и notify

Добавлено Дата: 12 March, 2012 категория: Java

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

Читать »

Стратегии производительности транзакций

Добавлено Дата: 4 March, 2012 категория: Microsoft SQL Server, Базы данных

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

Читать »