如何解決多執行緒 共享全域性變數 問題

2021-08-28 02:14:17 字數 823 閱讀 6979

解決多執行緒共享全域性變數問題,在多執行緒中實現多工難免會遇見共享全域性變數問題,當多個執行緒同時對乙個全域性變數操作,會出現資源競爭問題,從而導致資料結不正確,即遇到線性安全問題

那麼該如何解決呢?

引入同步機制

同步機制:

1.為什麼會有這個機制,有什麼作用?

同步:跟字面的意思不太一樣,它是指協同步調,按預定的先後順序進行執行,比如:你說完,我再說;你做完,我再做;你執行完,我再執行。

同步就是等待,等你做完我在做,在多執行緒程式設計中,一些敏感的資料不允許被多個執行緒同時訪問,因為會出現執行緒安全問題,通過執行緒同步機制

能夠保證共享資料在任何時候,最多有乙個執行緒訪問,以保證資料的正確性!

具體以什麼方式解決?

引入互斥鎖(下點)

互斥鎖解決共享全域性變數出現的執行緒安全問題

1.互斥鎖是實現同步機制的一種解決方案,好比多執行緒是實現多工的一種方法

2.某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為「鎖定」,其他執行緒不能更改;直到該執行緒釋放資源,

將資源的狀態變成「非鎖定」,其他的執行緒才能再次鎖定該資源。互斥鎖保證了每次只有乙個執行緒進行寫入操作,

從而保證了多執行緒情況下資料的正確性。

3.具體的操作

1.取得鎖:mutex_lock = threading.lock()

2.上鎖:mutex_lock.acquire()

3.釋放鎖:mutex_lock.release()

4.注意點:

在共享全域性變數中,當用互斥鎖鎖上時,當運算的數目比較大時,產生的結果可能有些誤差,但最終結果大體相同

多執行緒 共享全域性變數問題

多執行緒 共享全域性變數問題 多執行緒開發可能遇到的問題 假設兩個執行緒t1和t2都要對全域性變數g num 預設是0 進行加1運算,t1和t2都各對g num加10次,g num的最終的結果應該為20。但是由於是多執行緒同時操作,有可能出現下面情況 在g num 0時,t1取得g num 0。此時...

多執行緒 共享全域性變數問題

多執行緒開發可能遇到的問題 假設兩個執行緒t1和t2都要對全域性變數g num 預設是0 進行加1運算,t1和t2都各對g num加10次,g num的最終的結果應該為20。但是由於是多執行緒同時操作,有可能出現下面情況 在g num 0時,t1取得g num 0。此時系統把t1排程為 sleepi...

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...