Advertisement
Guest User

Untitled

a guest
Aug 16th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. import PlaygroundSupport
  2. import Foundation
  3.  
  4. class Worker {
  5.  
  6. private let queue = DispatchQueue.global(qos: .background)
  7. private let serialQueue = DispatchQueue(label: "com.acme.serial")
  8. public private(set) var count = 0
  9.  
  10. func incrementCount() {
  11. serialQueue.sync {
  12. count += 1
  13. }
  14. }
  15.  
  16. func work() {
  17. let workItem = DispatchWorkItem() { [weak self] in
  18. guard let s = self else { return }
  19. s.incrementCount()
  20. print("🔵 Work [\(s.count)]")
  21. }
  22.  
  23. queue.async(execute: workItem)
  24.  
  25. workItem.wait()
  26. }
  27.  
  28. }
  29.  
  30. let worker = Worker()
  31. let queue1 = DispatchQueue(label: "com.acme.queue1", attributes: .concurrent)
  32. let queue2 = DispatchQueue(label: "com.acme.queue2", attributes: .concurrent)
  33. let queue3 = DispatchQueue(label: "com.acme.queue3", attributes: .concurrent)
  34. let range = 0..<5
  35. queue1.async {
  36. range.forEach { _ in
  37. worker.work()
  38. print("🔴 Done [\(worker.count)]")
  39. }
  40. }
  41. queue2.async {
  42. range.forEach { _ in
  43. worker.work()
  44. print("🔴 Done [\(worker.count)]")
  45. }
  46. }
  47. queue3.async {
  48. range.forEach { _ in
  49. worker.work()
  50. print("🔴 Done [\(worker.count)]")
  51. }
  52. }
  53.  
  54. PlaygroundPage.current.needsIndefiniteExecution = true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement