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

不,除非您的程序是单线程的,否则您无法保证。否则,两个并发调用generate_id可能会覆盖彼此的结果。

于 2012-05-11T00:54:58.853 回答
0

常规(链接)库将共享其静态变量,但动态库将各自获得自己的副本。

希望您在源文件中有一些初始化n为零的东西。

于 2012-05-11T00:54:49.167 回答