0001 #if os(Linux) 0002 import Glibc 0003 #else 0004 import Darwin 0005 #endif 0006 0007 enum ConcurrencyType { 0008 case Serial 0009 case Concurrent 0010 } 0011 0012 public protocol DispatchQueue: class { 0013 0014 var identifier: String { get } 0015 0016 var events
ConcurrentQueue.swift:32 extension ConcurrentQueue: DispatchQueue {DispatchQueue.swift:27 extension DispatchQueue {MainQueue.swift:30 extension MainQueue: DispatchQueue {SerialQueue.swift:34 extension SerialQueue: DispatchQueue {: [() -> ()] { get set } 0017 0018 init(identifier: String) 0019 0020 var eventMutex
DispatchQueue.swift:31 events.append(event): pthread_mutex_t { get set } 0021 0022 var eventCondition
DispatchQueue.swift:30 pthread_mutex_lock(&eventMutex)DispatchQueue.swift:32 pthread_mutex_unlock(&eventMutex): pthread_cond_t { get set } 0023 0024 func run() 0025 } 0026 0027 extension DispatchQueue { 0028 0029 func addEvent(event: () -> ()) { 0030 pthread_mutex_lock(&eventMutex) 0031 events.append(event) 0032 pthread_mutex_unlock(&eventMutex) 0033 pthread_cond_signal(&eventCondition) 0034 } 0035 0036 func runBlock
DispatchQueue.swift:33 pthread_cond_signal(&eventCondition)(block: () -> (), inout onThread thread: pthread_t) { 0037 let holder = Unmanaged.passRetained(pthreadBlock(block: block)) 0038 0039 let pointer = UnsafeMutablePointer<Void>(holder.toOpaque()) 0040 0041 if pthread_create(&thread, nil, pthreadRunner, pointer ) == 0 { 0042 pthread_detach(thread) 0043 } else { 0044 print("pthread_create() error") 0045 } 0046 } 0047 0048 } 0049 0050 private class pthreadBlock
ConcurrentQueue.swift:56 self.runBlock(event, onThread: &thread)ConcurrentQueue.swift:62 runBlock(block, onThread: &loopThread)SerialQueue.swift:62 self.runBlock(block, onThread: &thread){ 0051 0052 let block
DispatchQueue.swift:37 let holder = Unmanaged.passRetained(pthreadBlock(block: block))DispatchQueue.swift:60 let unmanaged = Unmanaged<pthreadBlock>.fromOpaque( COpaquePointer( arg ) ): () -> () 0053 0054 init
DispatchQueue.swift:55 self.block = blockDispatchQueue.swift:61 unmanaged.takeUnretainedValue().block()( block: () -> () ) { 0055 self.block = block 0056 } 0057 } 0058 0059 private func pthreadRunner
DispatchQueue.swift:37 let holder = Unmanaged.passRetained(pthreadBlock(block: block))( arg: UnsafeMutablePointer<Void> ) -> UnsafeMutablePointer<Void> { 0060 let unmanaged = Unmanaged<pthreadBlock>.fromOpaque( COpaquePointer( arg ) ) 0061 unmanaged.takeUnretainedValue().block() 0062 unmanaged.release() 0063 return arg 0064 } 0065
DispatchQueue.swift:41 if pthread_create(&thread, nil, pthreadRunner, pointer ) == 0 {