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