如何在PowerShell ForEach-Object -Parallel循环中添加原子计数器
PowerShell 实现线程安全的原子整数操作
在PowerShell中没有原生的原子整数类型,但可以借助.NET的System.Threading.Interlocked类实现线程安全的整数增减,该类的所有操作都是原子性的,能避免多线程环境下的竞态问题。
针对你的场景,修改后的代码示例如下:
$myCounter = 0 $myItems | ForEach-Object -Parallel { # ... 其他业务处理逻辑 # 原子性地为计数器增加2,返回操作前的旧值 $oldValue = [System.Threading.Interlocked]::Add([ref]$using:myCounter, 2) # 若需使用更新后的值,可通过 $oldValue + 2 获取 # ... 后续逻辑可基于旧值或新值处理 } Write-Host "最终计数器值: $myCounter"
关键说明
[ref]用于传递变量引用,让Interlocked类能直接修改外部作用域的计数器变量- 并行块中引用外部变量必须加
$using:前缀 - 除了
Add方法,该类还提供Increment(原子+1)、Decrement(原子-1)等方法,适配不同需求
内容的提问来源于stack exchange,提问作者Ryu S.
相关产品推荐
相关产品推荐

