Сообщение Re[3]: Возможно ли синхронизовать процессы используя имя исп от 15.02.2022 15:04
Изменено 15.02.2022 15:28 alexander_r
Re[3]: Возможно ли синхронизовать процессы используя имя исп
Здравствуйте, MaLS, Вы писали:
MLS>Здравствуйте, alexander_r, Вы писали:
_>>может быть у обоих процессов и они оба завершатся, или наоборот, не успеют попасть в список процессов и оба откроются, вручную скорее всего это не воспроизвести, но программно вполне возможно
MLS>Вот это как раз и нужно обосновать.
MLS>P.S.
MLS>В программирование это как раз самое запарное доказывать, что кто-то был неправ.
MLS>Конечно сдаётся программу As Is, но от этого As Is заказчик уже беситься.
тест запускаем несколько процессов с синхронизацией через GetProcessesByName(..), при этом у меня стабильно воспроизводится ситуация, когда условие (Process.GetProcessesByName(procName).Length > 1) во всех процессах и в итоге не ничего открывается, теоретически может случится и запуск двух процессов, но с меньшей вероятностью
синхронизация через mutex работает всегда
MLS>Здравствуйте, alexander_r, Вы писали:
_>>может быть у обоих процессов и они оба завершатся, или наоборот, не успеют попасть в список процессов и оба откроются, вручную скорее всего это не воспроизвести, но программно вполне возможно
MLS>Вот это как раз и нужно обосновать.
MLS>P.S.
MLS>В программирование это как раз самое запарное доказывать, что кто-то был неправ.
MLS>Конечно сдаётся программу As Is, но от этого As Is заказчик уже беситься.
тест запускаем несколько процессов с синхронизацией через GetProcessesByName(..), при этом у меня стабильно воспроизводится ситуация, когда условие (Process.GetProcessesByName(procName).Length > 1) во всех процессах и в итоге не ничего открывается, теоретически может случится и запуск двух процессов, но с меньшей вероятностью
static void Main(string[] args)
{
var procName = Process.GetCurrentProcess().ProcessName;
if (args != null && args.Length > 0)
{
Parallel.For(0, 5, new Action<int>(i =>
{
Process.Start(procName + ".exe");
}));
}
if (Process.GetProcessesByName(procName).Length > 1)
{
Console.WriteLine("ALREADY RUNNING");
return;
}
Console.WriteLine("RUN");
Console.ReadKey();
}синхронизация через mutex работает всегда
static void Main(string[] args)
{
var procName = Process.GetCurrentProcess().ProcessName;
if (args != null && args.Length > 0)
{
Parallel.For(0, 5, new Action<int>(i =>
{
Process.Start(procName + ".exe");
}));
return;
}
bool createdNew = false;
Mutex mutex = null;
try
{
mutex = new Mutex(true, procName, out createdNew);
if (!createdNew)
{
Console.WriteLine("ALREADY RUNNING");
return;
}
Console.WriteLine("RUN");
Console.ReadKey();
}
finally
{
if (mutex != null)
{
if (createdNew)
{
mutex.ReleaseMutex();
}
mutex.Dispose();
}
}
}Re[3]: Возможно ли синхронизовать процессы используя имя исп
Здравствуйте, MaLS, Вы писали:
MLS>Здравствуйте, alexander_r, Вы писали:
_>>может быть у обоих процессов и они оба завершатся, или наоборот, не успеют попасть в список процессов и оба откроются, вручную скорее всего это не воспроизвести, но программно вполне возможно
MLS>Вот это как раз и нужно обосновать.
MLS>P.S.
MLS>В программирование это как раз самое запарное доказывать, что кто-то был неправ.
MLS>Конечно сдаётся программу As Is, но от этого As Is заказчик уже беситься.
тест запускаем несколько процессов с синхронизацией через GetProcessesByName(..), при этом у меня стабильно воспроизводится ситуация, когда условие (Process.GetProcessesByName(procName).Length > 1) во всех процессах и в итоге ничего не открывается, теоретически может случится и запуск двух процессов, но с меньшей вероятностью
синхронизация через mutex работает всегда
MLS>Здравствуйте, alexander_r, Вы писали:
_>>может быть у обоих процессов и они оба завершатся, или наоборот, не успеют попасть в список процессов и оба откроются, вручную скорее всего это не воспроизвести, но программно вполне возможно
MLS>Вот это как раз и нужно обосновать.
MLS>P.S.
MLS>В программирование это как раз самое запарное доказывать, что кто-то был неправ.
MLS>Конечно сдаётся программу As Is, но от этого As Is заказчик уже беситься.
тест запускаем несколько процессов с синхронизацией через GetProcessesByName(..), при этом у меня стабильно воспроизводится ситуация, когда условие (Process.GetProcessesByName(procName).Length > 1) во всех процессах и в итоге ничего не открывается, теоретически может случится и запуск двух процессов, но с меньшей вероятностью
static void Main(string[] args)
{
var procName = Process.GetCurrentProcess().ProcessName;
if (args != null && args.Length > 0)
{
Parallel.For(0, 5, new Action<int>(i =>
{
Process.Start(procName + ".exe");
}));
}
if (Process.GetProcessesByName(procName).Length > 1)
{
Console.WriteLine("ALREADY RUNNING");
return;
}
Console.WriteLine("RUN");
Console.ReadKey();
}синхронизация через mutex работает всегда
static void Main(string[] args)
{
var procName = Process.GetCurrentProcess().ProcessName;
if (args != null && args.Length > 0)
{
Parallel.For(0, 5, new Action<int>(i =>
{
Process.Start(procName + ".exe");
}));
return;
}
bool createdNew = false;
Mutex mutex = null;
try
{
mutex = new Mutex(true, procName, out createdNew);
if (!createdNew)
{
Console.WriteLine("ALREADY RUNNING");
return;
}
Console.WriteLine("RUN");
Console.ReadKey();
}
finally
{
if (mutex != null)
{
if (createdNew)
{
mutex.ReleaseMutex();
}
mutex.Dispose();
}
}
}