スレッドが同時に実行される場合、スレッドがリソースを競合してデータの曖昧さが生じるのを防ぐために、重要なリソースへの安全なアクセスを確保する必要があります。 スレッド同期: 条件変数 条件変数を使用する理由は何ですか? クリティカルリソースのタイミング制御性については、条件が満たされると、シグナルと同様に、クリティカルリソースの操作を待機している他のスレッドに通知されます。 シナリオ: T-DAY展示会の行列/生産者-消費者モデル 条件変数とは何ですか? これは同期メカニズムです。1つのスレッドを使用してこの変数を変更し、他のスレッドが実行を継続するための条件を満たし、他のスレッドは条件が変更されたことを示す信号を受信します。 条件変数操作? 初期化と破棄 pthread_cond_wait 条件が満たされない場合、ロックは解除され、待機はブロックされます。この関数はアトミック操作です。1. スレッドを条件待機キューに入れる2. ロックを解除する 条件が満たされると、スレッドが起動され、ロックされます。 pthread_cond_signal 1対1ウェイクアップ 待機キュー内のスレッドを起動する pthread_cond_broadcast ブロードキャストウェイクアップ 待機キュー内のすべてのスレッドを起動する 待機とロック解除にアトミック操作が必要なのはなぜですか?/条件変数でミューテックスが使用されるのはなぜですか? pthread_cond_wait のロックは条件変数を保護し、シグナルの見逃しを防ぐためのものであるため、ロック解除の待機がアトミック操作ではない場合、たとえば、スレッド A が最初にロック解除され、CPU タイム スライスがスレッド B に切り替わり、スレッド B がロックして条件変数シグナルを送信し、次にスレッド A に切り替わります。スレッド A は待機時間になる前にシグナルを見逃し、永久にブロックされる可能性があります。したがって、待機とロック解除はアトミック操作である必要があります。 重要なリソースが存在するかどうかを判断するために while ループが必要なのはなぜですか? 1 対多の状況では、プロデューサーがシグナルを送信し、待機中のスレッドが起動されてロックされますが、ロックできるのは 1 つのスレッドのみで、他のスレッドはロックを待機してブロックされます。このスレッドが重要なリソースを使い果たした場合、他のスレッドが判断を下さずに前進し続けるのは不合理です。 シグナルは最初にロック解除する必要がありますか、それとも後でロック解除する必要がありますか? 最初にロックが解除され、ブロックされておらず待機中のスレッドによってロックが取得され、その後重要なリソースが使用される場合、ロック解除後の信号は無意味になり、誤ったウェイクアップになります。 まず、singal が起動し、起動したスレッドがロックを競い合うようにします。Linux では、2 つのキューがあります。1 つは cond_wait で、もう 1 つは mutex_lock です。singal は cond_wait のスレッドを mutex_lock に転送するだけで、ユーザー空間には戻らないため、効率が向上します。 スレッドの相互排他: ミューテックスロック なぜミューテックスを使用するのですか? 重要なリソースにのみ同時にアクセスし、重要なリソースが変更されないように保護します。 シナリオ: ダフ屋がチケットを奪う ミューテックスとは何ですか? これは 0/1 カウンターです。1 は操作に使用できるリソースがあることを意味し、0 は操作に使用できるリソースがないことを意味します。 ミューテックスロック操作? 初期化と破棄 ロック---カウントが1の場合は0に設定して必要な操作を実行します。カウントが0の場合はブロックしてカウントが1になるまで待機します。 ロック解除 --- カウントを1に設定する 以上が今回ご紹介した関連知識の全てとなります。123WORDPRESS.COMをご活用いただき、誠にありがとうございます。 |
序文: MySQL では、マスター/スレーブ アーキテクチャが最も基本的かつ最も一般的に使用されるア...
注意: この方法は、Webkit ベースのブラウザにのみ適用されます。ブラウザのスクロールバーが広す...
昨年、プロジェクトの必要性により、Python でクローラーを作成しました。クロールされたデータは、...
序文Linux には、ネットワーク接続、プロセス、およびその他の情報をリアルタイムで収集するための対...
このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...
Docker に TensorFlow 環境をすばやくインストールし、TensorFlow を使用し...
目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...
目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...
フロントエンドとバックエンドを完全に分離する場合、Vue プロジェクトでトークン検証を実装する一般的...
MySQL 8.0.21のインストールと設定方法を記録してみんなで共有します。 1. ダウンロード1...
1. 需要ベースには 300 台の新しいサーバーがあり、CentOS7.6 オペレーティング システ...
この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...
目次序文構築可能なスタイルシートとは何ですか? CSSモジュールスクリプトの使用インポートアサーショ...
この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...
障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...