多執行緒簡介01 函式式和繼承式實現多執行緒及互斥鎖

2021-09-19 09:14:00 字數 3185 閱讀 6929

多執行緒

cpu:

程式:**指令集合

程序:程式的執行過程

執行緒:指令執行的最小單位

執行緒安全 慢 同步

非執行緒安全(執行緒不安全) 快 非同步

鎖?執行緒鎖-互斥鎖 lock lock.acquire() lock.release()

繼承方式實現多執行緒

執行緒的狀態(生命週期)

建立狀態---->就緒狀態----->執行狀態------>死亡狀態

| |

|-掛起狀態-|

eg1

import threading

def demo(name):

for i in range(10):

print(name,i)

t1 = threading.thread(target = demo, args = ("逍遙",))

t2 = threading.thread(target = demo, args = ("雪花",))

t1.start()

t2.start()

eg2

import threading

import time

def run(name):

for i in range(1,101):

print(name,"跑了",i,"公尺")

time.sleep(0.2)

t1 = threading.thread(target = run, args = ("紅",))

t2 = threading.thread(target = run, args = ("藍",))

t3 = threading.thread(target = run, args = ("黃",))

t1.start()

t2.start()

t3.start()

eg3

import threading,time

list =

def store(name):

while true:

print(name,"存了一袋速食麵,倉庫剩餘速食麵為:",len(list))

time.sleep(1)

def take(name):

while true:

if len(list) == 0:

time.sleep(1)

else:

list.pop()

print(name,"取了一袋速食麵,倉庫剩餘速食麵為:",len(list))

time.sleep(1.5)

t1 = threading.thread(target = store, args = ("p1",))

t2 = threading.thread(target = store, args = ("p2",))

t3 = threading.thread(target = store, args = ("p3",))

t4 = threading.thread(target = take, args = ("p4",))

t5 = threading.thread(target = take, args = ("p5",))

t6 = threading.thread(target = take, args = ("p6",))

t7 = threading.thread(target = take, args = ("p7",))

t1.start()

t2.start()

t3.start()

t4.start()

t5.start()

t6.start()

t7.start()

eg3 error

import threading,time

list =

for i in range(100):

def take(name):

while len(list) > 0:

time.sleep(0.1)

list.pop()

print(name,"取了一袋速食麵,倉庫剩餘為:",len(list))

t1 = threading.thread(target = take, args = ("p1",))

t2 = threading.thread(target = take, args = ("p2",))

t3 = threading.thread(target = take, args = ("p3",))

t1.start()

t2.start()

t3.start()

繼承

import threading

class mythread(threading.thread):

def __init__(self):

threading.thread.__init__(self)

def run(self):

for i in range(100):

print(i)

t1 = mythread()

t2 = mythread()

t1.start()

t2.start()

互斥鎖

import threading,time

list = ["烤冷麵"]

lock = threading.lock()

def take():

lock.acquire()

time.sleep(1)

while len(list) > 0:

list.pop()

print("取走乙份")

lock.release()

t1 = threading.thread(target = take)

t2 = threading.thread(target = take)

t3 = threading.thread(target = take)

t1.start()

t2.start()

t3.start()

繼承式多執行緒

之前,我們只是簡單的介紹了多執行緒演示,也通過時間設定看出來了,多執行緒和單執行緒的不同。現在我們進行更深入的了解,來聊一聊,另外一種多執行緒方式,繼承式多執行緒,和乙個多執行緒的等待。說明 繼承式多執行緒是自己自定義類,去繼承theading.tread這個類,通過啟動,去執行run方法中的 im...

Lua非搶占式多執行緒

當乙個協同正在執行時,不能在外部終止他。只能通過顯示的呼叫 yield 掛起他的執行。對於某些應用來說這個不存在問題,但有些應用對此是不能忍受的。不存在搶占式呼叫的程式是容易編寫的。不需要考慮同步帶來的 bugs,因為程式中的所有執行緒間的同步都是顯示的。你僅僅需要在協同 超出臨界區時呼叫 yiel...

程序 執行緒簡介及多執行緒的優缺點

先介紹下程序 執行緒 多執行緒,再總結下多執行緒的優缺點 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,也就是應用程式的執行例項,程序是系統進行資源分配和排程的乙個獨立單位。每個程序是由私有的虛擬位址空間 資料和其它各種系統資源組成,程序在執行過程中建立的資源隨著程序的終止而被銷毀,...