libdispatch does not require a call dispatch_main(), it integrates with the main sample of the main thread through the main send queue, see section dispatch_get_main_queue(3)and COMPATIBILITY.
Executable files that do not invoke dispatch_main()and want to use the main queue must run the main thread's runloop in one of the common modes for blocks in the main send queue for processing; either indirectly through standard raster methods (for example, NSApplicationMain()), or directly through the CFRunLoop or NSRunLoop APIs.
Please do not try to use a symbol _dispatch_main_queue_callback_4CF, this is an internal part of the implementation that may change in the future, and any code that relies on it will be interrupted without warning.
libdispatch CFRunLoops , , API CFRunLoopPerformBlock() runloop.
: Linux, libdispatch, runloops AFAIK.
runloop Linux, , , ( ) _dispatch_main_queue_callback_4CF()
_dispatch_queue_wakeup_main() , runloop (, , runloop).