wm.*_*1us 2 semaphore grand-central-dispatch swift
我正在学习GCD并且对信号量有疑问.这是我的代码:
class ViewController: UIViewController {
var semaphore: dispatch_semaphore_t! = nil
override func viewDidLoad() {
super.viewDidLoad()
semaphore = dispatch_semaphore_create(0)
dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0)) {
print("Entering")
self.semaphoreTask()
print(self.semaphore.debugDescription)
}
semaphoreTask()
print(semaphore.debugDescription)
}
func semaphoreTask() {
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
for i in 0...1000 {
print(i)
if i == 1000 {
print("i is equal to 10000!")
}
}
dispatch_semaphore_signal(self.semaphore)
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,那么semaphoreTask中没有任何内容打印在控制台中,但如果我改变了
semaphore = dispatch_semaphore_create(0)
Run Code Online (Sandbox Code Playgroud)
至
semaphore = dispatch_semaphore_create(1)
Run Code Online (Sandbox Code Playgroud)
一切都开始运作良好.
问题是我为什么要写dispatch_semaphore_create(1)而不是0?
谢谢!
您可以通过两种不同的方式使用信号量:
signal在准备就绪时调用.消费者呼叫wait等待预期的项目/资源.wait和资源可用,他们可以继续.如果不是,他们被阻止.每个人都完成了他们调用的资源signal.所以,你看到它的预期是因为你将信号量设置为就绪标志,但是将其用作访问限制(因为你wait先调用).
| 归档时间: |
|
| 查看次数: |
1833 次 |
| 最近记录: |