О каких оптимизациях компилятора, CLR или ЦП следует помнить при работе с потоками и неблокирующей синхронизацией?

StackOverflow https://stackoverflow.com/questions/1848326

Вопрос

Как следует из названия, о каких оптимизациях компилятора, CLR или ЦП следует помнить при работе с потоками и неблокирующей синхронизацией?

Я немного прочитал об изменении порядка инструкций для повышения эффективности, которое может привести к поломке, и об оптимизации кэширования, которая приведет к тому, что переменные не будут сразу видны другим потокам. [0], но есть ли еще (я уверен, что они есть), о которых мне нужно знать?

Будем очень признательны за любые ссылки на рекомендуемую литературу/блоги/статьи/и т. д.

Спасибо, Эгиль.

Обновлять: Благодаря ссылке Джонса на сообщение в блоге Джо Даффи я нашел гораздо больше полезной информации, которой решил поделиться с вами, ребята:

Это было полезно?

Решение

По сути, вам нужно знать о модели памяти .NET.Не обращайте внимания на то, какие оптимизации выполняются в данный момент — кодируйте модель.

Я бы посоветовал этот пост в блоге Джо Даффи как хорошая отправная точка.

Я бы также рекомендовал вам не создайте свой собственный код блокировки.ИМХО, это слишком сложно для смертных.Используйте такие платформы, как Parallel Extensions (в .NET 4.0), которые подходят именно вам.

Другие советы

У Джо Даффи есть отличная книга под названием «Параллельное программирование в Windows", которую я определенно рекомендую прочитать, если вы интересуетесь параллелизмом в Windows (включая программирование без блокировок).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top