Шаблоны использования функций InitOnce

Поскольку от написания кода без использования блокировок может начать болеть голова, вам, вероятно, имеет смысл переложить эту обязанность на каких-нибудь других людей, чтобы голова болела у них. И такими людьми являются парни из команды работки ядра Windows, которые написали довольно много готовых программных компонентов, не использующих блокировки, которые теперь не нужно разрабатывать вам. Среди них,…

0

Алгоритмы без использования блокировок: однократная инициализация

Частным случаем singleton-конструктора является обычная «ленивая» инициализация множества переменных. В однопоточном приложении вы можете написать примерно такой код: // предположим, что все допустимые значения переменных a и b удовлетворяют условиям: // a ≥ 0 и b ≥ a. Таким образом, -1 не является допустимым значением // и мы будем использовать его для того, чтобы обозначить,…

0

Алгоритмы без использования блокировок: выбор уникального значения (решения)

В прошлый раз я опубликовал задание для разминки, содержащее фрагмент кода для выбора уникального в пределах процесса значения. Я приведу его еще раз: dwUniqueId = InterlockedCompareExchange(&g_dwUniqueId,                                         g_dwUniqueId+1,                                         g_dwUniqueId); Скорее всего, проще будет перечислить то, что в этой функции корректно, нежели перечислять то, что она делает неправильно. Эм… все слова написаны без ошибок. Это все. Дэмиен…

0

Алгоритмы без использования блокировок: однократная инициализация

Частным случаем singleton-конструктора является обычная «ленивая» инициализация множества переменных. В однопоточном приложении вы можете написать примерно такой код: // предположим, что все допустимые значения переменных a и b удовлетворяют условиям: // a ≥ 0 и b ≥ a. Таким образом, -1 не является допустимым значением // и мы будем использовать его для того, чтобы обозначить,…

0

Алгоритмы без использования блокировок: выбор уникального значения (решения)

В прошлый раз я опубликовал задание для разминки, содержащее фрагмент кода для выбора уникального в пределах процесса значения. Я приведу его еще раз: dwUniqueId = InterlockedCompareExchange(&g_dwUniqueId,                                         g_dwUniqueId+1,                                         g_dwUniqueId); Скорее всего, проще будет перечислить то, что в этой функции корректно, нежели перечислять то, что она делает неправильно. Эм… все слова написаны без ошибок. Это все. Дэмиен…

0

Алгоритмы без использования блокировок: singleton-конструктор

Содержимое первой половины статьи будет, скорее всего, знакомым для многих (или почти всех?) читателей, но в конце статьи есть интересное упражнение. Весьма практичным шаблоном для Interlocked-* функций является ленивая инициализация без блокировок, которая использует InterlockedCompareExchangePointerRelease. Да, наименование у этой функции очень длинное, но, в действительности, каждая часть этого наименования важна. Widget *g_pwidCached; Widget *GetSingletonWidget() {…

0

Алгоритмы без использования блокировок: выбор уникального значения (разминка)

Вот небольшой фрагмент кода, который предназначен для генерации уникального числа в процессе. А вот статья для поднятия настроения. Предупреждение: она может оказаться полезной, а может и не оказаться. dwUniqueId = InterlockedCompareExchange(&g_dwUniqueId,                                         g_dwUniqueId+1,                                         g_dwUniqueId); Покритикуйте этот фрагмент кода.

0

Самая смешная шутка, которую я когда-либо рассказывал (по мнению трехлетних малышей)

Я протестировал эту шутку на нескольких детях в возрасте трех и четырех лет, и каждый раз она срабатывала. Два котенка шли по улице, и один из них шлепнулся на попу! Я разработал эту шутку для одной из моих любимых племянниц. Она только начала учиться рассказывать шутки и попросила меня рассказать ей какую-нибудь шутку. Один из…

0

Предыстория задорного сообщения Комиксного чата

Спустя несколько месяцев после моего сообщения о печальной кончине задорного сообщения в Комиксном чате, я получил письмо ни от кого иного как от автора Комиксного чата — Д. Дж. Керландера (DJ Kurlander): Я был тем человеком, который начал проект «Комиксный чат» в подразделении Microsoft Research, и ответственен за то сообщение: «Этот человек слишком ленив, чтобы…

0

Алгоритмы без использования блокировок: выбор уникального значения (разминка)

Вот небольшой фрагмент кода, который предназначен для генерации уникального числа в процессе. А вот статья для поднятия настроения. Предупреждение: она может оказаться полезной, а может и не оказаться. dwUniqueId = InterlockedCompareExchange(&g_dwUniqueId,                                         g_dwUniqueId+1,                                         g_dwUniqueId); Покритикуйте этот фрагмент кода.

0