ホームページ  >  記事  >  バックエンド開発  >  Python のスレッド同期とは何ですか? Python スレッド モジュールを 1 つの記事で理解する

Python のスレッド同期とは何ですか? Python スレッド モジュールを 1 つの記事で理解する

Tomorin
Tomorinオリジナル
2018-08-16 17:37:401457ブラウズ

複数のスレッドが共同して特定のデータを変更すると、予期しない結果が発生する可能性があります。データの正確性を確保するには、複数のスレッドを同期する必要があります

Thread オブジェクトの Lock と Rlock を使用すると、単純な スレッド同期を実現できます。両方のオブジェクトには、一度に 1 つのスレッドのみを操作する必要があるデータに対して取得メソッドと解放メソッドがあります。の場合、その操作は取得メソッドと解放メソッドの間に配置できます。次のとおりです:

マルチスレッドの利点は、複数のタスクを同時に実行できることです (少なくとも、そう感じられます)。ただし、スレッドがデータを共有する必要がある場合、データの非同期の問題が発生する可能性があります。

次の状況を考えてみましょう。リスト内のすべての要素が 0 で、スレッド「set」は後ろから前にすべての要素を 1 に変更し、スレッド「print」はリストを前から後ろに読み取って出力します。

次に、スレッド「set」が変更を開始すると、スレッド「print」がリストを出力し、出力は半分が 0、半分が 1 になります。これがデータの非同期です。この状況を回避するために、ロックの概念が導入されました。

ロックには、ロックとロック解除の 2 つの状態があります。 "set" などのスレッドが共有データにアクセスしたい場合は、まずロックを取得する必要があります。"print" などの別のスレッドがロックを取得した場合は、スレッド "set" を一時停止させます (これは同期ブロックです)。スレッド " Print " アクセスが完了し、ロックが解放された後、スレッド "set" を継続させます。

このような処理を行うと、リストを印刷する際にオール0かオール1のどちらかが出力されるようになり、半分0と半分1という恥ずかしい光景がなくなりました。

rreeee


以上がPython のスレッド同期とは何ですか? Python スレッド モジュールを 1 つの記事で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。