美文网首页
Swift DispatchSemaphore

Swift DispatchSemaphore

作者: 单抽律化娜 | 来源:发表于2020-03-06 17:10 被阅读0次

信号量机制实质是PV操作,具体操作如下:

1、P操作的动作是:

(1)S减1;

(2)若S减1后大于或等于零,则程序继续执行;

(3)若S减1后小于零,则被阻塞后进入与相对应的等待队列。

2、V操作的动作是:

(1)S加1;

(2)若S加1后大于零,则程序继续执行;

(3)若S加1后小于或等于零,则从等待队列中唤醒一等待进程,然后再返回原程序继续执行。

PV操作须成对使用,举个例子 :

DispatchQueue.global().async {
     /// 初始化值 S = 0
     let semaphore = DispatchSemaphore(value: 0)
     for _ in 0..<4 {
         DispatchQueue.global().async {
              Thread.sleep(forTimeInterval: 3)
              DispatchQueue.main.async {
                   /// S = -1 + 1,S = 0, 唤醒对应的等待进程,并继续执行
                   semaphore.signal()
              }
         }
         /// S = 0 - 1,S = -1, 进程阻塞并进入等待队列
         semaphore.wait()
     }
     DispatchQueue.main.async {
         print("全部执行完毕")
     }
}

相关文章

网友评论

      本文标题:Swift DispatchSemaphore

      本文链接:https://www.haomeiwen.com/subject/ucfwrhtx.html