В C# общее используемое взаимное исключение Монитор . Тип' Система. Поточная обработка. Монитор '. Это может также использоваться неявно через' блокировка (Объект) ' оператор. Один пример его использования при построении Singleton-класса.
private static readonly Object instanceLock = new Object();
private static MySingleton instance;
public static MySingleton Instance
{
lock(instanceLock)
{
if(instance == null)
{
instance = new MySingleton();
}
return instance;
}
}
оператор блокировки с помощью частного объекта блокирования создает критический раздел. Требуя, чтобы каждый поток ожидал, пока предыдущее не закончено. Первый поток введет раздел и инициализирует экземпляр. Второй поток будет ожидать, входить в раздел и получать инициализированный экземпляр.
Любой вид синхронизации статического участника может использовать оператор блокировки так же.
Существуют исторические причины, главным образом для упрощения преобразования кодов ASCII:
Цифры (от 0x30 до 0x39) имеют двоичный префикс 110000:
0 is 110000
1 is 110001
2 is 110010
и т. д. Поэтому, если вы удалите префикс (первые две '1'), вы получите цифру в двоичном десятичном формате.
Заглавные буквы имеют двоичный префикс 1000000:
A is 1000001
B is 1000010
C is 1000011
и т. Д. То же самое, если вы удалите префикс (первая «1»), вы получите символы с алфавитным индексом (A = 1, Z = 26 и т. Д.).
Строчные буквы имеют двоичный префикс 1100000:
a is 1100001
b is 1100010
c is 1100011
и т.п. То же, что и выше. Итак, если вы добавите 32 (100000) к заглавной букве, у вас будет строчная версия.
Эта диаграмма довольно хорошо показывает это из Википедии: обратите внимание на два столбца элемента управления 2, верхний 2 и нижний, а затем пробелы, заполненные разным.
Также имейте в виду, что ASCII был разработан на основе того, что было раньше. Для получения более подробной информации об истории ASCII см. эту превосходную статью Тома Дженнингса , которая также включает в себя значение и использование некоторых незнакомых управляющих символов.
Вот очень подробная история и описание кодов ASCII: http://en.wikipedia.org/wiki/ASCII
Вкратце:
Если вы посмотрите на двоичные представления для 'a' и 'A', вы увидите, что они отличаются только на 1 бит, что очень полезно (перевод верхнего регистра в нижний или наоборот просто вопрос немного перевернуть). Зачем именно там начинать, понятия не имею.
Итак по крайней мере, легко запомнить числа для A
, a
и 0-9
. Я понятия не имею о символах. См. Статью в Википедии о порядке ASCII .
Сам код был построен таким образом, чтобы большинство управляющих кодов были вместе, и все графические коды были вместе. В первые два столбца (32 позиции) были зарезервировано для управляющих символов. [14] "Космический" персонаж должен был прийти перед графикой произвести сортировку алгоритмы легкие, поэтому это стало позицией 0x20. [15] Комитет решил, что это важно поддерживать верхний регистр 64-символьные алфавиты и выбрали структура ASCII, чтобы его можно было легко сокращен до пригодного 64-символьного набора графических кодов. [16] Нижний регистр поэтому буквы не чередовались с верхним регистром. Чтобы варианты оставались открытыми для строчных букв и других графика, специальные и числовые коды ставились перед буквами, и буква «А» была помещена в позиция 0x41, чтобы соответствовать черновику соответствующие британские стандарт. [17] Цифры 0–9 были размещены так, чтобы они соответствовали значениям в двоичный префикс 011, что делает преобразование с двоичным десятичным кодом просто.
Расстояние между A
и a
равно 32. Это довольно круглое число, не так ли?
Разрыв в 6 символов между заглавными буквами и строчные буквы - это потому, что (32 - 26) = 6. (Примечание: в английском алфавите 26 букв).