题解 | #多线程#
多线程
http://www.nowcoder.com/practice/cd99fbc6154d4074b4da0e74224a1582
#真线程 #定义四个线程锁,输出"A"后,释放B的锁,从而达到通知B import threading import sys #线程函数1控制次数,输出"A"后,释放B的锁... def ThreadFun1(num): global stop for i in range(num): lock1.acquire() res.append("A") if i == num - 1:#输出完最后一次,就通知其他线程输完一次就可以结束了 stop = True lock2.release()#释放B的锁,从而达到通知B def ThreadFun2(): global stop while True: lock2.acquire() res.append("B") lock3.release() if stop == True:#结束线程 return def ThreadFun3(): global stop while True: lock3.acquire() res.append("C") lock4.release() if stop == True: return def ThreadFun4(): global stop while True: lock4.acquire() res.append("D") lock1.release()#输出完"D"释放"A"的锁 if stop == True: return while True: try: N = int(input()) res = [] stop = False #定义四个线程锁 lock1 = threading.Lock() lock2 = threading.Lock() lock3 = threading.Lock() lock4 = threading.Lock() #给其他三个线程加上锁先 lock2.acquire() lock3.acquire() lock4.acquire() #定义4个线程,只有第一个有参数,用于初始化输出A次数 t1 = threading.Thread(target=ThreadFun1, args=(N,)) t2 = threading.Thread(target=ThreadFun2, args=()) t3 = threading.Thread(target=ThreadFun3, args=()) t4 = threading.Thread(target=ThreadFun4, args=()) #开启线程 t1.start() t2.start() t3.start() t4.start() #等待线程结束 t1.join() t2.join() t3.join() t4.join() #线程都结束后,输出结果 print("".join(res)) except: # print(sys.exc_info()) break # import sys # import threading # while True: # try: # N = int(input()) # threadLock = threading.Lock() # index = 1 # res = [] # class AddAlpha(threading.Thread): # def __init__(self, N, threadId): # threading.Thread.__init__(self) # # super(AddAlpha,self).__init__() # # super.__init__(self) # self.n = N # self.threadId = threadId # self.count = 0 # def run(self): # global index # while self.count < self.n: # threadLock.acquire() # if index == 1 and self.threadId == 1: # res.append("A") # self.count += 1 # index = 2 # if index == 2 and self.threadId == 2: # res.append("B") # self.count += 1 # index = 3 # if index == 3 and self.threadId == 3: # res.append("C") # self.count += 1 # index = 4 # if index == 4 and self.threadId == 4: # res.append("D") # self.count += 1 # index = 1 # threadLock.release() # threads = [] # threads.append(AddAlpha(N,1)) # threads.append(AddAlpha(N,2)) # threads.append(AddAlpha(N,3)) # threads.append(AddAlpha(N,4)) # for thread in threads: # thread.start() # for thread in threads: # thread.join() # print("".join(res)) # except: # # print(sys.exc_info()) # break