How threads are assigned to queues is an implementation detail of Grand Central Dispatch. Two blocks dispatched to a (serial or concurrent) queue are not necessarily executed on the same thread. The only exception is the "main queue" which only executes on the main thread.
If you really have the requirement that the code executes on the same thread, you have
to use a different threading method, e.g. NSThread
or pthread_create
.