多執行緒同步的兩種方式

2021-08-22 03:27:01 字數 2083 閱讀 2689

這是我昨天練習的多執行緒同步問題

解決方法一:輪詢

import threading

import time

count=500

#全域性變數

user_input1=input('請輸入金額:') #終端輸入消費金額

user_input2=input('請輸入消費金額:')

flag=false

#這裡設定標識位,為false時表示空閒

defpos1

():global count,user_input,flag

while flag: #flag==true 等待

time.sleep(0.01) #睡眠等空閒再喚醒

flag=true

#到這裡表示標識位為false 此時把該標識位設定為true

if int(user_input1)<=500: #判斷輸入金額是否超過餘額

count=count-int(user_input1)

print('消費成功')

else:

print('你的餘額不足')

#操作完成 把標識位重新設定成false

flag=false

print('餘額為%d'%count)

defpos2

():global count,user_input,flag

while flag:

time.sleep(0.01)

flag=true

if int(user_input2)<=count:

count=count-int(user_input2)

print('消費成功')

else:

print('你的餘額不足')

flag=false

print('餘額為%d'%count)

t1=threading.thread(target=pos1) # 建立子執行緒,並在指定函式pos1執行

t1.start()

t2=threading.thread(target=pos2) #建立子執行緒,並在指定函式pos2執行

方式二:加鎖

import threading

import time

count=500

#總餘額

mutex=threading.lock() #建立鎖

defpos1

():global count,flag

mutex.acquire() #上鎖

if count>=400: #判斷消費金額是否超過餘額

count-=400

print('消費成功')

else:

print('你的餘額不足')

mutex.release() #解鎖

print('餘額為%d'%count)

defpos2

():global count,flag

mutex.acquire()

if count>=300:

count-=300

print('消費成功')

else:

print('你的餘額不足')

mutex.release()

print('餘額為%d'%count)

t1=threading.thread(target=pos1) #建立子執行緒,並在指定函式pos1執行

t1.start()

t2=threading.thread(target=pos2) #建立子執行緒,並在指定函式pos2執行

多執行緒 兩種方式建立執行緒

第一種方式 繼承thread類 public class threaddemo extends thread catch interruptedexception e if s 50 public static void main string args 第二種方式 實現runnable介面 pub...

多執行緒兩種實現方式

public class testthread1 extends thread public static void main string args 執行結果如下 可見執行緒由cpu隨機排程的。public class testthread2 extends thread override pub...

實現多執行緒的兩種方式

一 什麼是執行緒?定義 執行緒是程序中的乙個執行單元,負責當前程序中程式的執行,乙個程序中至少有乙個執行緒。乙個程序中是可以有多個執行緒的,這個應用程式也可以稱之為多執行緒程式。簡而言之 乙個程式執行後至少有乙個程序,乙個程序中可以包含多個執行緒 二 怎麼實現多執行緒?下面的兩種方式婦孺皆知 1.繼...