同じアドレス空間とすべての利用可能なデータを共有する並列エンティティの機能は、複数のプロセスのアドレス空間が異なるため、マルチプロセス ロックでは表現できません;
スレッドはプロセスよりも軽量で高速です。
#最適なアプリケーション シナリオ
各タスクは外部リソース (リモート接続やインターネットなど) を待つ必要があります。接続)
マルチスレッドの欠点
スレッドの管理には追加の CPU オーバーヘッドが必要;
スレッドのデッドロック、つまり、長い待機またはリソースの競合、
パブリック変数の同時読み取りまたは書き込みでは、予測できないエラーが発生することがよくあります。
検証のアイデア
wg で行うことはアトミックな操作ではありません。命令に変換されます。複数の命令で構成されます。バイナリ命令は、によって実行されます。コンピュータは変数を自動的に変更します。この操作は多くのステップに分かれています。たとえば、wg を読み取るスレッドが 2 つありますが、一度に完了することはできません。最初に val が読み取られ、その後、再度読み取られます。 . この操作はまだ終わっていないので、別のスレッド wg も読み込んでから、もう一度読み込んでください。 2 つのスレッドが wg=1; を追加する可能性がありますが、最終的な値は 2 になります。
問題をコード レベルで考えることはできません。コードが実行される環境も考慮する必要があります。仮想マシンの設定を観察すると、プロセッサが 4 つあることがわかりました。少なくとも 2 つのプロセッサが他のスレッドを処理している 1 つのスレッドが 2 つのプロセッサに配置され、同時にアクセスされる状況が発生する 5000 未満の発生確率は比較的高いですが、これも並列実行によって引き起こされます。
プロセッサを 1 つだけ有効にした後は、1 つのスレッドだけが実行され、他の 4 つのスレッドは確実に実行されません。2 つのスレッドが同時に実行される状況はありません。時間。5000 未満が出現する確率は非常に小さいです (その理由は、val 値 1 を読み取った後は戻る時間がないためです。この時点で、タイム スライスが到着し、スイッチが切れています。他のスレッドに切り替えるとき、読み取り値は 1 のままです。加算して加算、オンサイト回復、または加算して 1 で加算します。このシナリオが発生する可能性は非常に低いです) 1 つのプロセッサを並列化することはできません。
以上がLinux のマルチスレッドおよび同じメモリへのマルチスレッド同時アクセスの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。