0

th12 つの異なるスレッド (と)を使用するプロジェクトに取り組んでいますth2externそれらは、キーワードを介していくつかのオブジェクトと変数を共有します。それらはグローバルオブジェクトとグローバル変数です

何かのようなもの:

extern Obj1 *obj1;

それは私には思われる:

  1. 異なるスレッドで obj1 のメソッドを呼び出します。
  2. 異なるスレッドで obj1 の値を設定します。
  3. セマフォなどのグローバルブール変数を多用する。

プログラミングの安全な方法ではありませんが、それを思いとどまらせる紙や本のように、それを証明するための参考文献が欲しいです。誰でも明確にできますか?x86 プラットフォームが Visual Studio C++ で使用されていると想定しています。

4

1 に答える 1

2

ルールは単純です。スレッドがオブジェクト (double やポインターなどの「オブジェクト」を含む) を変更し、複数のスレッドがそれにアクセスする場合、すべてのアクセスを保護する必要があります。これは C++11 標準で定義されており、基本的には Posix で適用されたルールを再規定しています (私の知る限り、Windows でも同様です)。

それを超えて、何が安全かは、あなたが何をしているかによって異なります。たとえば、私自身のコードでは、const 以外のグローバル オブジェクトが必要になることはほとんどありません。ロギングは唯一の例外です (さらに、ほとんどのオブジェクトはスレッド ローカルであり、ログ メッセージが実際に最終的な宛先にフラッシュされるときに使用される唯一の共有オブジェクトになります)。ほとんどのオブジェクトはローカルであるか、動的に割り当てられ、スレッド間で共有されることはほとんどありません。

于 2013-08-28T09:38:44.413 に答える