本文小編為大家詳細(xì)介紹“python線程安全的情況有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“python線程安全的情況有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
成都創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),小程序開發(fā),10年建站對(duì)廣告制作等多個(gè)領(lǐng)域,擁有豐富的網(wǎng)站制作經(jīng)驗(yàn)。
1、可見性問題,CPU緩存引起的可見性問題,使線程一對(duì)共享變量A的操作無法立即被線程二看到,導(dǎo)致線程二獲得舊值。
2、原子問題。
例如,self._balance=self._balance-draw_amount這個(gè)語句不是原子CPU執(zhí)行命令。這個(gè)語句的執(zhí)行有三個(gè)CPU命令。
實(shí)例
import threading class Account: # 定義構(gòu)造函數(shù) def __init__(self, account_no, balance): """ :param account_no: 賬戶 :param balance: 余額 """ self.account_no = account_no self._balance = balance def draw(self, draw_amount): """ :param draw_amount: 需要取的錢 :return: """ if self._balance > draw_amount: print(threading.current_thread().getName() + '從' + self.account_no + " 取錢成功,賬戶取出金額是:" + str( draw_amount) + "\n") self._balance = self._balance - draw_amount print('賬戶余額是', self._balance) else: print(threading.current_thread().getName() + '從' + self.account_no + " 取錢失敗\n") # 兩個(gè)線程并發(fā)取錢 account = Account('賬戶一', 2000) threading.Thread(target=account.draw, name='線程一', args=(800,)).start() threading.Thread(target=account.draw, name='線程二', args=(800,)).start() threading.Thread(target=account.draw, name='線程三', args=(800,)).start()
讀到這里,這篇“python線程安全的情況有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。