(1)博客:深入理解GCD
🔒:(1)信号量--》以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。里面的3就是信号量。
wait:当一个线程调用Wait操作时,它要么得到资源然后将信号量减一,要么一直等下去(指放入阻塞队列)直到信号量大于等于一时。
signal:信号量上执行加操作,对应于车辆离开停车场,该操作之所以叫做“释放”是因为释放了由信号量守护的资源。
信号量资源为1情况,就是互斥锁。
队列(queue):队列其实就是一个用来提交 block 的对象。
任务(block)
线程(thread)
GCD会维护一个线程池,执行这些任务。
所以队列不等于线程。