日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:python線程安全的兩種情況

1、可見性問題,CPU緩存引起的可見性問題,使線程一對共享變量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線程安全的兩種情況,希望對大家有所幫助。更多Python學(xué)習(xí)指路:創(chuàng)新互聯(lián)Python教程

本文教程操作環(huán)境:windows7系統(tǒng)、Python 3.9.1,DELL G3電腦。


當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)Python教程:python線程安全的兩種情況
地址分享:http://www.dlmjj.cn/article/dhijchc.html