锁定代码的特定部分

本文关键字:定部 代码 锁定 | 更新日期: 2023-09-27 17:55:01

在控制台应用程序中锁定代码块的最佳实践应该是什么,以便在运行可执行文件/应用程序的多个实例时不会产生任何问题

string folder = Convert.ToString(ConfigurationManager.AppSettings["LogFilePath"]);
string configFile = Path.Combine(folder, "logger.xml");
FileStream fs = new FileStream(configFile, FileMode.Open);
log4net.Config.XmlConfigurator.Configure(fs);
fs.Close();

锁定代码的特定部分

应该使用互斥锁。一种同步原语,也可用于进程间同步。看到:Msdn

类似:

var mutex = new Mutex(false, "logger.xml-mutex");
if (!mutex.WaitOne(TimeSpan.FromSeconds(100), false))
{
    Console.WriteLine("Timed out...could not acquire mutex.");
    return;
}
try
{
    string folder = Convert.ToString(ConfigurationManager.AppSettings["LogFilePath"]);
    string configFile = Path.Combine(folder, "logger.xml");
    FileStream fs = new FileStream(configFile, FileMode.Open);
    log4net.Config.XmlConfigurator.Configure(fs);
    fs.Close();
}
finally { mutex.ReleaseMutex(); }