Swift S中的信号量之美
在这个故事中,我们将执行以下操作 :
- 了解什么是信号量
- 了解信号量如何工作
- 实施并解释2个示例
开始吧
信号量使我们能够控制多个线程对共享资源的访问。 为了简单起见,让我们考虑以下现实情况:
一位父亲和三个孩子坐在家里,然后掏出iPad …
孩子2 :我想玩iPad !!!
小孩1 :不!,我想先玩…
孩子3 :Ipad! iPad! iPad! *掌声*
父亲 :好的,孩子2,因为您首先问过,并且目前没有人使用iPad,请拿走它,但是一旦完成,请告诉我。 其他孩子,请耐心等待。
孩子2: (5分钟后)我做完父亲了。
父亲:孩子1,有iPad,请在完成后告诉我。
孩子1: (5分钟后)我做父亲了。
父亲:孩子3,有iPad,请在完成后告诉我。
孩子3: (5分钟后)我做完父亲了。
在上述方案中,父亲是信号量,iPad是共享资源,孩子是线程。 注意父亲如何确保一次只有一个孩子使用iPad。 如果将此与编程进行比较,则一次只能有一个线程访问共享资源。 另外,请注意使用顺序,首先询问的是谁(FIFO)。
提示 :共享资源可以表示变量,也可以表示工作,例如从url下载图像,从数据库读取等等。
如果父亲只是把iPad给孩子们怎么办? 飞机飞行到可能损坏的iPad😖的地步。 如果将其与编程进行比较,则多个线程会尝试同时访问同一资源,并且没有任何阻止。 这种行为可能导致争用情况,崩溃,并且显然,我们的代码将不是线程安全的。
线程安全:可以从多个线程安全地调用而不会引起任何问题的代码。