Какво се случва, ако dispatch_main бъде извикан извън основната нишка?

Функцията dispatch_main се използва, за да накара главната нишка да започне да обработва блокове, изпратени до главната опашка. И така, dispatch_main е вид цикъл за изпълнение, който не се връща и след обработка на вече поставените в опашката блокове изчаква други блокове да бъдат изпратени на главната опашка.

И така, какво се случва, ако dispatch_main бъде извикан извън основната нишка? Ако главната нишка обработва друга функция, прекъсва ли се, за да позволи на главната нишка да обработи поставените на опашка блокове? Разрешено ли е извикване на dispatch_main извън основната нишка?


person LuisABOL    schedule 14.05.2013    source източник


Отговори (1)


dispatch_main() потвърждава, когато се извиква извън главната нишка и прекъсва вашия процес, той трябва да бъде извикан само от главната нишка.

dispatch_main() всъщност не е нищо друго освен маскиран pthread_exit() (вижте имплементация): превръща основната опашка в обикновена серийна опашка за изпращане и след това прекратява основната нишка.

Основната опашка ще се обслужва от нишка на работна опашка при поискване от този момент нататък, точно както всяка друга опашка за изпращане.

person das    schedule 14.05.2013
comment
Ето стабилна връзка към имплементацията dispatch_main() при конкретен ангажимент. Този в отговора се променя с добавянето на ангажименти. github.com/apple/swift-corelibs- libdispatch/blob/409a3b88/src/ - person Sterling Archer; 09.12.2020