假设我正在尝试生成特定于流程的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中使用共享对象对此进行了测试,但我不确定这原则上有多安全。
答案 0 :(得分:1)
不,除非您的程序是单线程的,否则无法保证。否则,对generate_id
的两次并发调用可能会覆盖彼此的结果。
答案 1 :(得分:0)
常规(链接)库将共享其静态变量,但动态库将各自获得自己的副本。
希望您在源文件中有一些内容可以将n
初始化为零。