
Многопоточность: Решение проблемы производителя и потребителя с помощью NSLock
Приведенный выше код блокирует выполнение других потоков всякий раз, когда элементы изменяются. Таким образом, всякий раз, когда блок выполняется, блокировка гарантирует, что ни один другой блок не будет задействован для выполнения, и, следовательно, делает приведенный выше код потокобезопасным.
Приведенный выше код использует
Приведенный выше код блокирует выполнение других потоков всякий раз, когда элементы изменяются. Таким образом, всякий раз, когда блок выполняется, блокировка гарантирует, что ни один другой блок не будет задействован для выполнения, и, следовательно, делает приведенный выше код потокобезопасным.
Приведенный выше код использует
defer
в remove
. Он используется, потому что defer вызывается перед выходом из функции. Поскольку remove имеет два пути выхода, репликация lock.unlock() в двух местах не рекомендуется. Следовательно, в этом случае defer полезен.