c++ - getenv() 怎么可能是线程安全的?

标签 c++

我想使用 getenv()功能。

现在有人评论说如果多个线程调用这个函数,这将不是线程安全的。但是,如果我查看 information page对于此功能,它声明:

Concurrently calling this function is safe, provided that the environment remains unchanged.

我理解静态数据 block 的概念,函数返回指向它的指针。我知道 block 的内容可以随着时间的推移而改变,通过多次调用该函数,如引用页面所述。

如果一个线程正在调用

getenv("myEnvVar1")

还有一个在打电话

getenv("myEnvVar2")

返回的指针指向的地方会使用同一个内存块吗?我应该如何解释“同时调用此函数是安全的”这一事实?

最佳答案

getenv 返回指向 ACTUAL 环境内容的指针 - 因此该进程有一个字符串数组,其中包含环境变量,您返回的不是拷贝,而是指向该内容的 ACTUAL 指针.

注意 char *p = getenv("foo"); ... setenv("foo", "新值"); ... use p 也是未定义的,因为 p 指向的字符串现在很可能已经更改 [并且不是以明确定义的方式]

关于c++ - getenv() 怎么可能是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476600/

相关文章:

时间:2019-03-08 标签:c++win32SendInput()

c++ - 非局部函数调用局部类型

c++ - 如何将共享库添加到QtCreator

C++ 映射迭代器

c++ - 平台无关的 C++ DLL

c++ - 简单的 Qt 嵌入式窗口问题

c++ - 'volatile uint8_t* and ' uint8_t (*) 类型的无效操作数

c++ - Waf 生成 Visual Studio 项目?

c++ - 如何为 Voronoi 图的单元格着色

c++ - sqlite3程序收到信号SIGSEGV,sqlite3_get_table()中出现段错误