1

プロセス固有の ID を生成しようとしているとしましょう:

class TestLib
{
  public:
  static int n;

  static int generate_id(){
    srand (time(NULL));
    if (n == 0)
    n = rand() % 10 + 1;

    return n;
  };
};

そして、TestLib を含むライブラリ A と B があります。

class TEST_A
{
  public:
    static void print() {
      std::cout << "A" << TestLib::generate_id() << std::endl;
    };
};

class TEST_B
{
  public:
    static void print() {
      std::cout << "B" << TestLib::generate_id() << std::endl;
    };
};

A と B のいずれかを使用する単一のプロセスが同じ ID を持つことが保証されますか?

ライブラリを静的にリンクすると、これは変わりますか?

共有オブジェクトを使用して linux-x86 でこれをテストしましたが、これが原則としてどれほど安全かはわかりません。

4

2 に答える 2

1

いいえ、プログラムがシングルスレッドでない限り、保証されません。そうしないと、 への 2 つの同時呼び出しがgenerate_id互いの結果をオーバーライドする可能性があります。

于 2012-05-11T00:54:58.853 に答える
0

通常の (リンクされた) ライブラリは静的変数を共有しますが、動的ライブラリはそれぞれ独自のコピーを取得します。

nうまくいけば、ゼロに初期化するソース ファイルに何かが含まれていることを願っています。

于 2012-05-11T00:54:49.167 に答える