Это случилось со мной, когда у меня было две копии одной и той же библиотеки (у меня было две разные версии библиотеки поддержки Android версии 4). Однажды я удалил один из них - проект скомпилирован, и я смог его запустить. Dan
Например, в C #. В более поздних версиях .NET framework это было изменено на:
bool lockTaken = false;
try
{
Monitor.Enter(object, ref lockTaken);
// Your code here...
}
finally
{
if (lockTaken)
{
Monitor.Exit(object);
}
}
Они связаны. Например, в C # оператор lock представляет собой простую оболочку try-finally вокруг входа в Monitor и выхода из , когда это сделано.
Мониторы - это "полуавтоматические" блокировки с помощью компилятора. Они позволяют объявлять синхронизированные
методы для классов и т. Д. Это просто другой подход к обеспечению взаимного исключения. Я нашел , что эта книга является наиболее полным объяснением концепций,
Блокировка обеспечивает взаимное исключение.
Монитор связывает данные, которые должны быть защищены, и примитивы взаимного исключения и синхронизации, необходимые для защиты доступа к данным.
Синхронизация используется, например, когда вам нужно, чтобы один поток ждал, пока не произойдет событие (например, дождитесь, пока другой поток не поместит элемент в очередь).
Мониторы - это конструкция языка программирования, которая делает то же самое, что и полуфоры / блокировки, но мониторы управляют общими данными путем синхронизации во время выполнения. В отличие от этого, блокировки защищают общие данные просто "вращением", которое может привести к плохой загрузке ЦП.