一、基本概念
線程
在一個進程內部要同時運行多個子任務,我們將進程內的子任務稱為線程,一個進程內至少包括一個線程,線程是最小的執行單元,沒有自己獨立的堆棧
線程調度
使用算法是線程按一定的順序執行
二、完成簡單的線程調度
題目要求
有兩個線程分別輸出0,2,4,6,8和1,3,5,7,9,編寫程序使得輸出順序是0,1,2,3,4,5,6,7,8,9
源代碼
import threading
import time
cond = threading.Condition()
def func1(num):
print("子線程(%s)開始執行" % (threading.current_thread().name))
with cond:
for i in range(num,10,2):
time.sleep(0.5)
print(i)
cond.wait()#等待,當前線程停止,其他線程執行
cond.notify()
print("子線程(%s)結束執行" % (threading.current_thread().name))
def func2(num):
print("子線程(%s)開始執行" % (threading.current_thread().name))
with cond:
for i in range(num, 10, 2):
time.sleep(0.5)
print(i)
cond.notify()#通知上面其他的線程自己已經執行完畢,然后自己等待
cond.wait()#自己等待
print("子線程(%s)結束執行" % (threading.current_thread().name))
if __name__ == '__main__':
print("主線程(%s)開始執行" % (threading.current_thread().name))
#主線程
t1 = threading.Thread(target=func1,name='線程1',args=(0,))
t2 = threading.Thread(target=func2, name='線程2',args=(1,))
t1.start()
t2.start()
print("主線程(%s)結束執行" % (threading.current_thread().name))