Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Environment.SetEnvironmentVariable(键、值、EnvironmentVariableTarget.Process)是线程安全的吗?_.net_Winapi_Environment Variables - Fatal编程技术网

.net Environment.SetEnvironmentVariable(键、值、EnvironmentVariableTarget.Process)是线程安全的吗?

.net Environment.SetEnvironmentVariable(键、值、EnvironmentVariableTarget.Process)是线程安全的吗?,.net,winapi,environment-variables,.net,Winapi,Environment Variables,医生似乎没有说,所以。。。有人知道我是否需要在这方面添加关键部分,如果我是多线程的话,我的所有环境变量都会读取吗 提示:在我关心的情况下,参考源似乎是本地api的一个简单的垫片 [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)] [ResourceExposure(ResourceScope.Process)] internal static e

医生似乎没有说,所以。。。有人知道我是否需要在这方面添加关键部分,如果我是多线程的话,我的所有环境变量都会读取吗

提示:在我关心的情况下,参考源似乎是本地api的一个简单的垫片

 [DllImport(KERNEL32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
        [ResourceExposure(ResourceScope.Process)]
        internal static extern bool SetEnvironmentVariable(string lpName, string lpValue);

我没有找到文档,但我确实编写了一些示例代码,这些代码运行许多任务,这些任务会改变32000个字符的环境变量值,并且没有发现结果的任何撕裂(例如,两个任务的结果都出现在最终值中的任何示例)。缺少撕裂并不意味着没有可见性/排序问题(向.NET字段读取/写入引用类型也可以避免撕裂)。如果没有同步原语,则无法保证排序更大。这在上下文中有关系吗?#中的
SetEnvironmentVariable
调用WINAPI函数
SetEnvironmentVariable
(如果调整进程环境变量),它在内部调用
RtlSetEnvironmentVariable
,这是
RtlSetEnvironmentVar
的一个小包装器,如果您正在调整进程的环境变量,它将在
PEB->FastPebLock
上调用
RtlEnterCriticalSection
。如果文档不调整,您将负责多线程同步声明它是线程安全的。