似乎不要等待小组的结束
let oneSem_1 = DispatchSemaphore(value: 1)
let semaphore = DispatchSemaphore(value: 4)
let semaphoreEND = DispatchSemaphore(value: 0)
var p=0
let group_2 = DispatchGroup()
var t:[Int]=[]
let MAX=1000000
for _ in 0..<MAX {
group_2.enter()
DispatchQueue.global().async{
//group_2.enter()
semaphore.wait()
oneSem_1.wait()
p+=1
t.append(p)//car ressource critique, sinon pas rempli à fond
oneSem_1.signal()
if p == MAX{
print("p == MAX")
semaphoreEND.signal()
}
semaphore.signal()
//group_2.leave()
}
group_2.leave()
}
group_2.wait()
// semaphoreEND.wait()
// while(p != MAX){
// usleep(1_00_000)
// print("p=",p)
// }
print("END p=\(p) t.count=\(t.count)")
我期望 ND p=1000000 t.count=1000000 的输出
如果我取消注释 // semaphoreEND.wait() 我可以得到这个结果
,但实际输出是
结束 p=999871 t.count=999881
其他问题:t.count != p
对于 Group,我希望所有任务都结束。为什么我必须取消注释 // semaphoreEND.wait() ?
谢谢
项目在这里下载:https ://github.com/fredOnGitHub/semaphore_to_modify_1