发布于 

swift实现阻塞队列

swift实现简易阻塞队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import Foundation

//阻塞队列
class BlockingQueue<T>{

private var queue : [T]
private let capacity : Int
private let queueAccess = DispatchQueue(label: "BlockingQueue.queueAccess")
private let emptySemaphore : DispatchSemaphore
private let fullSemaphore : DispatchSemaphore

init(_ capacity : Int) {
self.queue = []
self.capacity = capacity
self.emptySemaphore = DispatchSemaphore(value: 0)
self.fullSemaphore = DispatchSemaphore(value: capacity)
}

//放入一个元素
func put(_ element : T){
fullSemaphore.wait()
queueAccess.sync {
self.queue.append(element)
}
emptySemaphore.signal()
}

//取出一个元素
func take() -> T{
emptySemaphore.wait()
let element = queueAccess.sync {
let item = self.queue.removeFirst()
return item
}
fullSemaphore.signal()
return element
}
}



Copyright © 2023 ChenWei | Powered By Stellar
本站已运行 00 小时 00