Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@rsms
Created November 10, 2010 19:04
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rsms/671329 to your computer and use it in GitHub Desktop.
Save rsms/671329 to your computer and use it in GitHub Desktop.
Sleeping barber with GCD (Grand Central Dispatch)
int main (int argc, const char * argv[]) {
dispatch_queue_t waitingChairs = dispatch_queue_create("waitingChairs", 0);
dispatch_queue_t barber = dispatch_queue_create("barber", 0);
dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
NSInteger ident = 0;
while (++ident) {
if (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW) != 0) {
printf("Customer %d turned away\n", ident);
continue;
}
dispatch_async(waitingChairs, ^{
printf("Customer %d taking a seat\n", ident);
dispatch_async(barber, ^{
dispatch_semaphore_signal(semaphore);
printf("Shave and a haircut for customer %d\n", ident);
});
});
}
dispatch_release(waitingChairs);
dispatch_release(barber);
dispatch_release(semaphore);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment