python—多线程之数据混乱问题
一、加入線程同步的原因
由于同一進(jìn)程中的所有線程都是共享數(shù)據(jù)的,如果對(duì)線程中共享數(shù)據(jù)的并發(fā)訪問不加以限制,結(jié)果將不可預(yù)期,在嚴(yán)重的情況下,還會(huì)產(chǎn)生死鎖
在一個(gè)進(jìn)程內(nèi)的所有線程共享全局變量,能夠在不使用其他方式的前提下完成多線程之間的數(shù)據(jù)共享(這點(diǎn)要比多進(jìn)程要好)
缺點(diǎn)就是,線程是對(duì)全局變量隨意遂改可能造成多線程之間對(duì)全局變量的混亂(即線程非安全)
二、解決數(shù)據(jù)混亂的方法
為了讓線程是安全的,解決方法:
1、為了解決這個(gè)問題,需要允許線程獨(dú)占地訪問共享數(shù)據(jù),這就是線程同步。
2、讓每個(gè)線程擁有一個(gè)獨(dú)立的私有變量
三、數(shù)據(jù)混亂示意圖
四、代碼實(shí)現(xiàn)數(shù)據(jù)混亂問題
執(zhí)行結(jié)果為:數(shù)據(jù)混亂
但是當(dāng)我把累加次數(shù)設(shè)置小,就不會(huì)出現(xiàn)數(shù)據(jù)混亂問題
數(shù)據(jù)混亂的原因:
cpu分成多個(gè)時(shí)間片段,啟動(dòng)10線程,分配10個(gè)cpu時(shí)間片段,當(dāng)我累加數(shù)字設(shè)置比較小的時(shí)候,在單個(gè)cpu時(shí)間片段內(nèi),for循環(huán)代碼就執(zhí)行完,就不會(huì)產(chǎn)生數(shù)據(jù)混亂的。當(dāng)我數(shù)據(jù)設(shè)置的比較大時(shí),在單個(gè)cpu時(shí)間片段內(nèi),for循環(huán)代碼就執(zhí)行不完,并且沒有分配2個(gè)或2個(gè)以上的連續(xù)的cpu時(shí)間片段,導(dǎo)致一個(gè)cpu時(shí)間片段沒有執(zhí)行完該線程,下一個(gè)線程開始執(zhí)行了
總結(jié)
以上是生活随笔為你收集整理的python—多线程之数据混乱问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python—多线程定义和创建(一)
- 下一篇: python—多线程之共享数据