Skip to content

Instantly share code, notes, and snippets.

@GUIEEN
Forked from robertmryan/GroupOrSemaphore.swift
Created March 20, 2021 00:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GUIEEN/ed2574f7e0222a0e35343fc9e71b872e to your computer and use it in GitHub Desktop.
Save GUIEEN/ed2574f7e0222a0e35343fc9e71b872e to your computer and use it in GitHub Desktop.
func performUsingGroup() {
let dq1 = DispatchQueue.global(qos: .default)
let dq2 = DispatchQueue.global(qos: .default)
let group = DispatchGroup()
for i in 1...3 {
dq1.async(group: group) {
print("\(#function) DispatchQueue 1: \(i)")
}
}
for i in 1...3 {
dq2.async(group: group) {
print("\(#function) DispatchQueue 2: \(i)")
}
}
group.notify(queue: .main) {
print("done by group")
}
}
func performUsingSemaphore() {
let dq1 = DispatchQueue.global(qos: .default)
let dq2 = DispatchQueue.global(qos: .default)
let semaphore = DispatchSemaphore(value: 1)
DispatchQueue.global().async {
for i in 1...3 {
_ = semaphore.wait(timeout: .distantFuture)
dq1.async {
print("\(#function) DispatchQueue 1: \(i)")
semaphore.signal()
}
}
for i in 1...3 {
_ = semaphore.wait(timeout: .distantFuture)
dq2.async {
print("\(#function) DispatchQueue 2: \(i)")
semaphore.signal()
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment