同步鎖2 互斥鎖

2022-05-06 06:03:08 字數 3223 閱讀 1973

1

import

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(),使其變成不阻塞

1

import

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

加上鎖之後就變成序列。

但是序列的就只有加鎖的這三行,所以加鎖還是有意義的。其它的**照常同時是並行的執行。

1

import

threading

2import

time

34 num = 100

5 lock =threading.lock()

6def

add():78

global

num9

print

(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 執行緒二需要...