質問です
前のセクションの例では、各スレッドは互いに独立しており、相互に関係はありません。ここで例を想定します。グローバル カウント num があり、各スレッドはこのグローバル カウントを取得し、num に基づいて何らかの処理を実行し、その後 num に 1 を加算します。次のようなコードを書くのは簡単です:
# encoding: UTF-8 import threading import time class MyThread(threading.Thread): def run(self): global num time.sleep(1) num = num+1 msg = self.name+' set num to '+str(num) print msg num = 0 def test(): for i in range(5): t = MyThread() t.start() if __name__ == '__main__': test()
しかし、実行結果は正しくありません:
Thread-5 set num to 2
Thread-3 set num to 3
Thread-2 set num to 5
Thread-1 set num to 5
Thread-4 set num to 4
問題の理由は、同じリソースへの複数のスレッドのアクセスが制御されていないため、データが損傷し、スレッド操作の結果は予測できません。この現象は「スレッドアンセーフ」と呼ばれます。
ミューテックス ロックの同期
上記の例は、マルチスレッド プログラミングの最も一般的な問題、つまりデータ共有につながります。ある共有データを複数のスレッドで変更する場合、同期制御が必要となります。
スレッド同期により、複数のスレッドが競合するリソースに安全にアクセスできるようになります。最も簡単な同期メカニズムは、ミューテックス ロックを導入することです。ミューテックスは、ロック/ロック解除という状態をリソースに導入します。スレッドが共有データを変更したい場合は、まずそのリソースをロックする必要があり、その時点でリソースのステータスは「ロック」されており、スレッドがリソースを解放してリソースのステータスを「」に変更するまで、他のスレッドはそれを変更できません。ロックが解除されました」と表示された場合、他のスレッドはリソースを再度ロックできます。ミューテックス ロックは、一度に 1 つのスレッドだけが書き込み操作を実行することを保証するため、マルチスレッド状況でのデータの正確性が保証されます。
Lock クラスはスレッド モジュールで定義されており、ロックを簡単に処理できます:
#Create lock
mutex = threading.Lock()
#Lock
mutex.acquire([timeout])
#Release
mutex.release()
このうち、lockメソッドacquireはタイムアウト付きのパラメータtimeoutをオプションで持つことができます。タイムアウトが設定されている場合、戻り値を使用してタイムアウト後にロックが取得されたかどうかを判断できるため、他の処理を実行できます。
ミューテックスを使用して上記の例を実装するコードは次のとおりです:
import threading import time class MyThread(threading.Thread): def run(self): global num time.sleep(1) if mutex.acquire(1): num = num+1 msg = self.name+' set num to '+str(num) print msg mutex.release() num = 0 mutex = threading.Lock() def test(): for i in range(5): t = MyThread() t.start() if __name__ == '__main__': test()
実行結果:
Thread-3 set num to 1
Thread-4 set num to 2
Thread-5 set num to 3
Thread-2 set num to 4
Thread-1 set num to 5
ミューテックス ロックを追加した後の実行結果が期待どおりであることがわかります。
同期ブロッキング
スレッドがロックのacquire()メソッドを呼び出してロックを取得すると、ロックは「ロック」状態になります。一度に 1 つのスレッドだけがロックを取得できます。このときに別のスレッドがロックを取得しようとすると、そのスレッドは「ブロック」されます。これを「同期ブロック」と呼びます (マルチスレッドの基本概念を参照)。
ロックを所有するスレッドがロックの release() メソッドを呼び出してロックを解放するまで、ロックは「ロック解除」状態になります。スレッド スケジューラは、同期ブロッキング状態にあるスレッドの 1 つを選択してロックを取得し、そのスレッドを実行状態にします。
ミューテックス ロックの最も基本的な内容は次のとおりです。次のセクションでは、リエントラント ロック (RLock) とデッドロックの問題について説明します。

記事では、構文のあいまいさのためにPythonにおけるタプル理解の不可能性について説明します。 Tupple式を使用してTuple()を使用するなどの代替は、Tuppleを効率的に作成するためにお勧めします。(159文字)

この記事では、Pythonのモジュールとパッケージ、その違い、および使用について説明しています。モジュールは単一のファイルであり、パッケージは__init__.pyファイルを備えたディレクトリであり、関連するモジュールを階層的に整理します。

記事では、PythonのDocstrings、それらの使用、および利点について説明します。主な問題:コードのドキュメントとアクセシビリティに関するドキュストリングの重要性。

記事では、ラムダの機能、通常の機能との違い、およびプログラミングシナリオでの有用性について説明します。すべての言語がそれらをサポートするわけではありません。

記事では、PythonでのBreak、継続、およびパスについて説明し、ループの実行とプログラムの流れの制御における役割について説明します。

この記事では、機能やクラスなどのコード構造のプレースホルダーとして使用されるヌル操作であるPythonの「パス」ステートメントについて説明し、構文エラーなしで将来の実装を可能にします。

記事では、パス機能をPythonの引数として説明し、モジュール性やソートやデコレーターなどのユースケースなどの利点を強調しています。

記事は、Pythonの /および//オペレーターについて説明します: /真の分割の場合、//床部門の場合。主な問題は、それらの違いとユースケースを理解することです。CharacterCount:158


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









