powershell“使用“ 0”自变量调用“ WaitOne”的异常:“由于互斥体的放弃,等待已完成。”

时间:2018-09-24 08:40:04

标签: powershell-v2.0 mutex

我们正在尝试在Powershell中实现互斥锁以处理不同的Powershell 处理读取/写入相同的内存映射文件。 我们已将其实现如下:

$mmf =[System.IO.MemoryMappedFiles.MemoryMappedFile]::CreateOrOpen("Memory_Map", 2048, [System.IO.MemoryMappedFiles.MemoryMappedFileAccess]::ReadWrite);
$mmfAccessor =  $mmf.CreateViewAccessor();
$mtx = New-Object System.Threading.Mutex($false, "SAM_Azure_Mutex");

function writeMappedFile {

        Param(
             [Parameter(Mandatory=$True)][Int64]$Text)
        [Byte[]]$Buffer = [System.Text.ASCIIEncoding]::Unicode.GetBytes($Text);
        $mmfAccessor.Write(0, $Buffer.Length);
        $mmfAccessor.WriteArray(0, $Buffer, 0, $Buffer.Length);

    }
function readMappedFile {

        $Buffer = New-Object Byte[] 2048;
        [Void]$mmfAccessor.ReadArray(0, $Buffer, 0, $Buffer.Length);  

        $retText = [System.Text.ASCIIEncoding]::Unicode.GetString($Buffer);
        $retText = $retText.Trim(0);

        [int64]$textInt = [int64]$retText;
        Write-Host ($textInt);

        return $textInt;
    }
function test1 {
if($mtx.WaitOne() ){

  read from memorymapped file

    $mtx.ReleaseMutex()
} 
 else {
    Write-Warning ("Timed out acquiring mutex!")
}
}
function test2{
if($mtx.WaitOne() ){


 write to memorymapped file

    $mtx.ReleaseMutex()
}
}
$mmfAccessor.Dispose()
$mmf.Dispose()
exit 0 

0 个答案:

没有答案