Write a program that uses two threads to print the numbers from 1 to n.
Anonymous
The idea would be to use either a semaphore or a lock. func speedyCounter(_ n: Int, _ numThreads: Int) { var currentNumber = 0 let lock = NSLock() let sem = DispatchSemaphore(value: 1) let operationQueue = OperationQueue() operationQueue.maxConcurrentOperationCount = numThreads let lock_counter: (inout Int) -> Void = { currentNumber in while true { lock.lock() if currentNumber >= n { lock.unlock() return } print(currentNumber) currentNumber += 1 lock.unlock() } } let sem_counter: (inout Int) -> Void = { currentNumber in while true { sem.wait() if currentNumber >= n { sem.signal() return } print(currentNumber) currentNumber += 1 sem.signal() } } operationQueue.addOperation { sem_counter(¤tNumber) } } usage: speedyCounter(100, 5)
Check out your Company Bowl for anonymous work chats.