if (runInDemoMode)
{
lock (this)
{
//Initalization of tables
dCreator.createInitialTables();
SetupPlugins();
AutoConfigure(database);
//Simulator
sim.processSimulatedData();
}
return;
}
В идеале я хотел бы иметь инициализированные таблицы (один раз), а затем симулятор работает снова и снова. Так как у меня есть 3 встроенных метода для таблиц, которые также находятся под замком, они все время становятся все активнее, и я не хочу этого делать.C# lock (this) method
Любые предложения относительно того, как я могу гарантировать, что если я нахожусь в режиме демонстрации, я могу инициализировать таблицы один раз, а затем запускать симулятор снова и снова.
Жизненно важно, чтобы таблицы были инициализированы до запуска симулятора, иначе это не сработает.
Вы должны заблокировать частный объект, а не 'this' (общий шаблон -' private readonly object _createTableLockObj = new object(); '). Если другой класс сделал «lock (yourClass)», это также помешало бы вашему коду войти в ваш замок. Используя закрытый объект для блокировки блокировки, можно использовать только одну функцию. –
[Не блокировать 'this'] (http://stackoverflow.com/q/251391/1968) –
Создайте статический volatile bool, который установлен в true после инициализации. Только если этот bool является ложным, вызовите процедуру инициализации таблицы –