【问题标题】:Will a static in a lib be the same value for all objects?库中的静态变量对于所有对象来说都是相同的值吗?
【发布时间】:2012-05-11 00:49:20
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      希望您的源文件中有将n 初始化为零的内容。

      【讨论】:

      • 不需要将n初始化为零,所有全局(静态)变量都定义为0(int)、false(布尔)、NULL(指针)。
      猜你喜欢
      • 2011-06-18
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多