lib中的静态是否对所有对象都是相同的值?

时间:2012-05-11 00:49:20

标签: c++ static shared-libraries static-libraries

假设我正在尝试生成特定于流程的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中使用共享对象对此进行了测试,但我不确定这原则上有多安全。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

希望您在源文件中有一些内容可以将n初始化为零。