1import
threading
2import
time
34 num = 100
5def
add():
6global
num7 s =num
8 time.sleep(0.02)
9 num = s - 1
1011 l =list()
12for i in range(100):
13 t = threading.thread(target=add)
1415
t.start()
16for i in
l:17
i.join()
18print
(num)
19輸出:
20 99
2122 程序完成,退出碼 0
遇到了io阻塞,進行了切換。
單個執行緒中間發生了切換。任務只處理了一半。 需要拿出乙個解決的辦法將正在執行的執行緒處理完,在進行下乙個執行緒。
可以進行加上同步鎖lock = threading.lock(),使其變成不阻塞
1import
threading
2import
time
34 num = 100
5 lock =threading.lock()
6def
add():
7lock.acquire()
8global
num9 s =num
10 time.sleep(0.02)
11 num = s - 1
12lock.release()
1314 l =list()
15for i in range(100):
16 t = threading.thread(target=add)
1718
t.start()
19for i in
l:20
i.join()
21print
(num)
22輸出:230
2425 程序完成,退出碼 0
加上鎖之後就變成序列。
但是序列的就只有加鎖的這三行,所以加鎖還是有意義的。其它的**照常同時是並行的執行。
1import
threading
2import
time
34 num = 100
5 lock =threading.lock()
6def
add():78
global
num9
(num)
10lock.acquire()
1112 s =num
1314 time.sleep(0.02)
15 num = s - 1
16lock.release()
1718 l =list()
19for i in range(100):
20 t = threading.thread(target=add)
2122
t.start()
23for i in
l:24
i.join()
25print
(num)
26輸出:
27 100
28 100
29 100
30 100
31 100
32 100
33 100
34 100
35 100
36 100
37 100
38 100
39 100
40 100
41 100
42 100
43 100
44 100
45 100
46 100
47 100
48 100
49 100
50 100
51 100
52 100
53 100
54 100
55 100
56 100
57 100
58 100
59 100
60 100
61 100
62 100
63 100
64 100
65 100
66 100
67 100
68 100
69 100
70 100
71 100
72 100
73 100
74 100
75 100
76 100
77 100
78 100
79 100
80 100
81 100
82 100
83 100
84 100
85 100
86 100
87 100
88 100
89 100
90 100
91 100
92 100
93 100
94 100
95 100
96 100
97 100
98 100
99 100
100 100
101 100
102 100
103 100
104 100
105 100
106 100
107 100
108 100
109 100
110 100
111 100
112 100
113 100
114 100
115 100
116 100
117 100
118 100
119 100
120 100
121 100
122 100
123 100
124 100
125 100
126 100
127 0
這就是處理辦法
同步 互斥鎖 讀寫鎖 區別
相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散步在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的 某種先後...
執行緒同步 互斥鎖
一 為什麼要用多執行緒?避免阻塞 乙個程序如果只有乙個執行緒的話,當這個乙個執行緒阻塞則就整個程序阻塞,無法再去完成其他事情。提高效率,避免cpu空 程式經常涉及讀寫操作就會訪問磁碟,這些操作的速度比cpu慢的多,而為了等待這些操作的響應,cpu又不能去幹其他的事情或者處理新的請求,導致這種單執行緒...
執行緒同步與互斥 互斥鎖
在多工作業系統中,同時執行的多個任務可能都需要使用同一種資源。這個過程有點類似於,公司部門裡,我在使用著印表機列印東西的同時 還沒有列印完 別人剛好也在此刻使用印表機列印東西,如果不做任何處理的話,列印出來的東西肯定是錯亂的。下面我們用程式模擬一下這個過程,執行緒一需要列印 hello 執行緒二需要...