powershell "Исключение, вызывающее" WaitOne "с аргументом (ами)" 0 ":" Ожидание завершено из-за заброшенного мьютекса ". - PullRequest
0 голосов
/ 24 сентября 2018

Мы пытаемся внедрить мьютекс в 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...