Page 85 - 6734
P. 85
self.i=i # ідентифікатор потоку
threading.Thread.__init__(self) # виклик
конструктора базового класу
def run(self): # забезпечує логіку потоку
mutex.acquire() # блокувати (лише один потік
може виконуватись в один і той самий момент часу)
#semaphore.acquire() # або так
A.append(self.i)
time.sleep(1)
A.append(self.i)
mutex.release() # розблокувати
#semaphore.release() # або так
mutex = threading.Lock() # те саме що
thread.allocate_lock()
#semaphore=threading.Semaphore(1) # або семафор
(тільки 1 потік одночасно)
A=[] # глобальний список
T=[] # список потоків
for i in range(4): # створити 4 потоки
t=Thread(i) # створити потік
t.start() # виконати метод run в потоці
T.append(t) # додати в список потоків
t = threading.Timer(2.0, lambda: A.append('timer')) #
створити потік,
t.start() # який стартує через 2 с
T.append(t)
for t in T:
t.join() # поки усі потоки не приєднаються
print A
[0, 0, 1, 'timer', 1, 2, 2, 3, 3]
[0, 1, 2, 3, 2, 3, 1, 0, 'timer']
84