例如
dispatch_semaphore_t semaphore = dispatch_semaphore_create(10);
参数为10,可以理解为信号总量为10
dispatch_semaphore_signal(semaphore);
发送一个信号,会让信号量总量为+1
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
每次调用会使信号总量-1,当信号总量小于等于0时,线程会等待(就是阻塞);当线程在等待时,再次调用dispatch_semaphore_signal(semaphore)时会使线程继续往下执行(就是通畅)。
网友评论