У меня есть вопрос, когда речь идет о создании "System Wide Mutex", который будет работать со многими экземплярами одного и того же приложения.
Итак, я хочу, чтобы процесс был потокобезопасным, как видно из кода, в котором я пишу в тот же файл:
Записать в тот же файл
Интересно, правильно ли я настроил это на программном уровне? Например, я освобождаю мьютекс, когда закрываю форму. Я также установил для bool значение true (InitiallyOwned) для мьютекса, когда я его создаю?
Я пытался гуглить, но не уверен, что получил правильный ответ.
Сценарий использования будет иметь возможность открывать и закрывать экземпляры в произвольном порядке и всегда иметь мьютекс на месте.
public Form1()
{
try
{
_mutex = System.Threading.Mutex.OpenExisting("systemWideMutex");
_mutex.WaitOne(); //obtain a lock by waitone
_mutex.ReleaseMutex(); //release
}
catch { _mutex = new System.Threading.Mutex(true, "systemWideMutex"); } //Create mutex for the first time
new Thread(threadSafeWorkBetween2Instances).Start(); //Start process
}
void threadSafeWorkBetween2Instances()
{
while (true)
{
try
{
_mutex = System.Threading.Mutex.OpenExisting("systemWideMutex");
_mutex.WaitOne(); //obtain a lock by waitone
//DO THREADSAFE WORK HERE!!!
//Write to the same file
_mutex.ReleaseMutex(); //release
}
catch { _mutex = new System.Threading.Mutex(true, "systemWideMutex"); } //Create mutex for the first time
Thread.Sleep(10000);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_mutex.ReleaseMutex(); //release
}