.net Environment.SetEnvironmentVariable(键、值、EnvironmentVariableTarget.Process)是线程安全的吗?
医生似乎没有说,所以。。。有人知道我是否需要在这方面添加关键部分,如果我是多线程的话,我的所有环境变量都会读取吗 提示:在我关心的情况下,参考源似乎是本地api的一个简单的垫片.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
[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
。如果文档不调整,您将负责多线程同步声明它是线程安全的。