Как перейти с OSSpinLock на os_unfair_lock()?
Начиная с MacOS 10.12, OSSpinLock
был объявлен устаревшим Сообщения об ошибках XCode побуждают меня использовать os_unfair_lock_unlock()
вместо.
В качестве наследства некоторых вещей с открытым исходным кодом, на которые я полагаюсь, я использую RegexKitLite с 2010 года.
Как я могу преобразовать тип блокировки вращения? Я могу управлять простой разблокировкой и блокировкой, но эти сравнения вызывают у меня головную боль:
if(rkl_cacheSpinLock != (OSSpinLock)0) { ... }
rkl_cacheSpinLock
имеет тип os_unfair_lock
и был инициализирован. OSSpinLock, кажется, имеет тип int
так что это if-утверждение, очевидно, не будет работать.
Может ли кто-нибудь указать мне правильный путь к этому? Я не слишком знаком с C и не очень понимаю арифметику указателей.
РЕДАКТИРОВАТЬ
После того, как я немного узнал о Си, я понял, что такое типизация Я пришел к решению, которое, кажется, работает. Мое понимание функциональности ОС на этом уровне отсутствует. Os_unfair_lock не слишком хорошо документирован для чайников, но похоже, что я ничего не сломал.
if (rkl_cacheSpinLock._os_unfair_lock_opaque != 0) { ... }
0 ответов
Похоже, никто никогда не удосужился ответить на ваш вопрос, так что вот оно:
#include <os/lock.h>
void foo()
{
os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
os_unfair_lock_lock(&lock);
/* Your critical section here */
os_unfair_lock_unlock(&lock);
}
Пожалуйста, обратитесь к документации для получения более подробной информации об ограничениях относительно того, где вы должны блокировать и разблокировать (tldr: это должен быть тот же поток, который блокирует и разблокирует).