0001 #if os(Linux) 0002 import Glibc 0003 #else 0004 import Darwin 0005 #endif 0006 0007 final class ConcurrentQueue{ 0008 let identifier
ConcurrentQueue.swift:32 extension ConcurrentQueue: DispatchQueue {Echo.swift:10 let globalQueue: ConcurrentQueueEcho.swift:14 globalQueue = ConcurrentQueue(identifier: "com.queue.global"): String 0009 0010 var events
ConcurrentQueue.swift:19 self.identifier = identifier: [() -> ()] 0011 0012 var eventMutex
ConcurrentQueue.swift:20 self.events = []ConcurrentQueue.swift:47 while self.events.count > 0 {ConcurrentQueue.swift:49 let event = self.events.removeFirst(): pthread_mutex_t 0013 0014 var eventCondition
ConcurrentQueue.swift:21 self.eventMutex = pthread_mutex_t()ConcurrentQueue.swift:38 pthread_mutex_init(&self.eventMutex, nil)ConcurrentQueue.swift:48 pthread_mutex_lock(&self.eventMutex)ConcurrentQueue.swift:50 pthread_mutex_unlock(&self.eventMutex): pthread_cond_t 0015 0016 var loopThread
ConcurrentQueue.swift:22 self.eventCondition = pthread_cond_t()ConcurrentQueue.swift:42 pthread_cond_init (&self.eventCondition, nil)ConcurrentQueue.swift:58 pthread_cond_wait(&self.eventCondition, &conditionMutex): pthread_t 0017 0018 init
ConcurrentQueue.swift:26 self.loopThread = pthread_t(nil)ConcurrentQueue.swift:62 runBlock(block, onThread: &loopThread)(identifier: String) { 0019 self.identifier = identifier 0020 self.events = [] 0021 self.eventMutex = pthread_mutex_t() 0022 self.eventCondition = pthread_cond_t() 0023 #if os(Linux) 0024 self.loopThread = pthread_t() 0025 #else 0026 self.loopThread = pthread_t(nil) 0027 #endif 0028 run() 0029 } 0030 } 0031 0032 extension ConcurrentQueue: DispatchQueue { 0033 0034 func run
Echo.swift:14 globalQueue = ConcurrentQueue(identifier: "com.queue.global")() { 0035 let block = { 0036 var conditionMutex = pthread_mutex_t() 0037 0038 pthread_mutex_init(&self.eventMutex, nil) 0039 0040 pthread_mutex_init(&conditionMutex, nil) 0041 0042 pthread_cond_init (&self.eventCondition, nil) 0043 0044 pthread_mutex_lock(&conditionMutex) 0045 0046 while true { 0047 while self.events.count > 0 { 0048 pthread_mutex_lock(&self.eventMutex) 0049 let event = self.events.removeFirst() 0050 pthread_mutex_unlock(&self.eventMutex) 0051 #if os(Linux) 0052 var thread = pthread_t() 0053 #else 0054 var thread = pthread_t(nil) 0055 #endif 0056 self.runBlock(event, onThread: &thread) 0057 } 0058 pthread_cond_wait(&self.eventCondition, &conditionMutex) 0059 } 0060 } 0061 0062 runBlock(block, onThread: &loopThread) 0063 } 0064 0065 } 0066
ConcurrentQueue.swift:28 run()