Почему вызов serialqueue.sync () не приводит к тупику?IOS

Программируем под IOS
Ответить
Anonymous
 Почему вызов serialqueue.sync () не приводит к тупику?

Сообщение Anonymous »

во время изучения Dispatchqueue я наткнулся на то, чего не совсем понимаю. Когда я напечатал нить, которая запускала блок, она оказалась главной нитью. Это смутило меня, потому что очередь не была главной очередью, но блок все еще выполнялся в основном потоке. < /P>
let serialQueue = DispatchQueue(label: "serial.queue")

serialQueue.sync {
print("current thread = \(Thread.current)") // current thread = _NSMainThread
}
< /code>
В документации для sync () я обнаружил следующее оператор: < /p>

В качестве оптимизации производительности эта функция выполняет блоки в текущем потоке
, когда это возможно, с одним исключением: блоки, представленные
на основную диспетчерскую Queue, всегда запуская в основном потоке. /> На основании этого описания я предположил, что если блок действительно был выполнен в текущем потоке (в этом случае основной поток), тогда должен был произойти тупик. Поскольку он синхронно, основной поток заблокируется до завершения блока. /> , но вопреки моим ожиданиям, никакого тупика не произошло, и код был выполнен просто в порядке. Я не могу выяснить, почему. < /P>
question.
  • Почему блок выполняется в основном потоке, даже если он был представлен в пользовательскую серийную очередь? Case? Я хотел бы понять, как именно работает основная поток.


Подробнее здесь: https://stackoverflow.com/questions/797 ... a-deadlock
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»