Ho sentito parlare molto delle famose code di spedizione di Apple e del GCD ma oggi è stata la prima volta che ho capito esattamente cosa sta succedendo, quindi ho iniziato a leggere Guida alla programmazione della concorrenza e questo paragrafo ha attirato la mia attenzione.
If you have two tasks that access the same shared resource but run on different threads, either thread could modify the resource first and you would need to use a lock to ensure that both tasks did not modify that resource at the same time. With dispatch queues, you could add both tasks to a serial dispatch queue to ensure that only one task modified the resource at any given time. This type of queue-based synchronization is more efficient than locks because locks always require an expensive kernel trap in both the contested and uncontested cases, whereas a dispatch queue works primarily in your application’s process space and only calls down to the kernel when absolutely necessary.
Quello che capisco è che suggeriscono di eseguire due compiti in serie per evitare l'uso di blocchi, che può essere fatto allo stesso modo nei thread. Ad esempio in Java puoi inserire due funzioni nella funzione eseguibile del thread e il thread le eseguirà in serie e in quel caso non avrai bisogno di blocchi.
Ora la mia domanda è che mi manca qualcosa?