re: предложение psychotik: volatile
- это ключевое слово в C, которое в основном сообщает компилятору, чтобы избежать оптимизации использования символа, к которому он привязан. Это важно для многопоточного кода или кода, который напрямую взаимодействует с оборудованием. Тем не менее, это не очень полезно для работы с блоками памяти (от malloc()
или NSData
.) Как сказал психотик, он предназначен для использования с примитивами, такими как int
или указателем (то есть самим указателем, а не данными, на которые он указывает). не сделав доступ к вашим данным быстрее, и может фактически замедлить его, победив приемы оптимизации компилятора.
Для синхронизации по перекрестным каналам ваша самая быстрая ставка - это, я думаю, OSSpinLock
, если вам не нужен рекурсивный доступ, или pthread_mutex
настроен как рекурсивный, если вы это сделаете. Помните, что OSSpinLock
, как следует из названия, является блокировкой спина, поэтому определенные шаблоны использования делают его менее эффективным, чем pthread_mutex
, но он также очень близок к металлу (он основан на операциях атомарного ввода/установки оборудования).
Если ваши данные действительно доступны достаточно часто, что вы заинтересованы в эффективности блокировки, вы, вероятно, захотите избежать NSData
и просто работать с блоком памяти от malloc()
- но не зная больше о том, что вы пытаясь выполнить или как часто вы обращаетесь к данным, решение не может быть легко представлено. Не могли бы вы рассказать нам больше о своих намерениях?
какие данные? Если это просто примитивные типы, использование ключевого слова «volatile» в дополнение к тому, о чем вы думаете, может быть достаточно. – psychotik
Я не знаком с ключевым словом volatile, я пытаюсь найти его, но это Objective-C или C? Простите, я нашел свое общее ключевое слово, идиот. Сейчас я исследую – Parad0x13