Мы пытаемся внедрить мьютекс в 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