Python的執行緒之執行緒同步

2022-09-21 16:51:15 字數 2273 閱讀 5135

目錄

在多執行緒程式中,它們互相獨立列印的時間卻是錯亂的!

如下圖程式設計客棧,明明t-0 > t-1 > t-2 (按照執行緒建立時間早晚排列)。最後輸出居然是t-1最落後。

我們怎麼樣做避免錯亂呢, 下面看看。

多執行緒,就是多個獨立的執行單位,同時執行同樣的事情。

多執行緒不是已經做到同時執行了嗎?還需要同步幹嘛?

是的,執行緒是同時被呼叫執行了,但是每個執行緒之間互相獨立,也互相競爭了。

這就跟跑道上有3個運動員,槍響之後同時開跑,但是他們通常卻不是同時到達終點。

同步是什麼意思?

同步就是原本這條跑道跑三個人的加上同步之後,在任意時間上,只有乙個人在跑道。

聽起來是不是匪夷所思,怎麼多執行緒不是為多個任務提高效率嗎?加個同步不就乙個時間只程式設計客棧有乙個任務執行了,這還扯啥多執行緒。

很遺憾,同步就是這個意思,我們有時會說完整一點,同步互斥!總結來說就是:同步是一種機制,它保證跑道上面任何時候只有乙個運動員。技術上來說就是,同步保證 程式資料 任何時候只被乙個執行緒操作。

我們使用同步機制的時候,也是在找那www.cppcns.com些應該被限制的'跑道『,利用同步機制保證在那個跑道上任意時刻只有乙個『運動員'在上面跑步。

(解釋的很清楚了,看不懂的可以找同學討論上面的這幾句)

我們了解了同步機制,下面看看鎖。

threading.lock是乙個類,我們能用它建立乙個鎖物件。

什麼是鎖?

維持同步互斥機制的媒介

相當於跑道有個大門,每次只開門讓乙個程式設計師進去跑

說錯了,運動員(程式設計師還是需要多鍛鍊啊)。

鎖要是壞了,後果可以自己想象(後面文章會說)。

我們下面**會用到lock的兩個函式:

acquire函式:獲取鎖

release函式:釋放鎖

前文說過了,加上主線程,一共是4個執行緒。

執行下面**看看:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @time : 2021/11/21 12:02 上午

# @author : leixuewei

www.cppcns.com# @csdn/juejin/wechat: 雷學委

# @xueweitag: codingdemo

# @file : __init__.py.py

# @project : hello

import threading

import datetime

import time

def dianzan_guanzhu(lock: threading.lock):

thread_name = threading.current_thread().getname()

print("執行緒啟動了:", thread_name)

now = datetime.datetime.now()

name = "python萌新" + thread_name

lock.acquire()

print("%s - %s name:%s" % (thread_name, now, name))

time.sleep(1)

result = "好棒!" + name + " 關注雷學委,學會了開發知識!"

print("%s - %s result:%s" % (thread_name, now, result))

lock.release()

return resultwww.cppcns.com

my_lock = threading.lock()

for i in range(3):

mythread = threading.thread(name="t-" + str(i), target=lambda: dianzan_guanzhu(my_lock))

print("mythread:", mythread)

print("is_alive:", mythread.is_alive())

mythread.start()

ac = threading.active_count()

print("active_count:", ac)

下面是執行結果:

我們看到每個執行緒都完整完成了任務,不會出現三個執行緒互相穿插錯亂的輸出。

這裡初學者可以感受一下同步的作用,效果。

以上就是一種執行緒協調方案。

執行緒同步,也並非同一步調,而是同步互斥!

本文標題: python的執行緒之執行緒同步

本文位址:

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...

91 執行緒之執行緒的同步

完成乙個程式,統計使用者輸入了多少個字元,輸入end結束,主線程和子執行緒合作。include include int main void printf 輸入乙個字串,以回車結束。n while scanf s buf 注意此函式的用法 printf 本次輸入了 d個字元。n strlen buf ...

python 執行緒之同步條件(Event

usr bin python coding utf 8 author fmspider time 2018 5 3 17 16 function 同步條件 event 條件同步和條件變數同步差不多意思,只是少了鎖功能,因為條件同步設計於不訪問共享資源的 條件環境。event threading.ev...