Я написал следующий код:многопоточность: замок на собственность - это правильно?
static readonly object failedTestLock = new object();
public static Dictionary<string, Exception> FailedTests
{
get
{
lock (failedTestLock)
{
return _failedTests;
}
}
set
{
lock (failedTestLock)
{
_failedTests = value;
}
}
}
public void RunTest(string testName)
{
try
{
//Run a test
}
catch (Exception exception)
{
// ?? Is this correct/threadsafe?
FailedTests.Add(testName, exception);
}
}
ВОПРОС:
Является ли это правильным способом, чтобы безопасно добавить отказавший тест словарю?
Является ли это потокобезопасным?
Is FailedTests.Add вызвал INSIDE блокировку или ЗАКРЫТЬ замок?
Можете ли вы объяснить, почему это правильно/threadsafe или почему нет?
Заранее спасибо
И если вы сделаете это, вам следует рассмотреть возможность использования 'ReadWriterLockSlim' – Bryan
Кстати, извините, если я попрошу об этом в последнее время. Но что, если мы заблокируем (это) вокруг обоих, геттер и сеттер? Не должно ли это гарантировать полную безопасность потоков в простой форме, с точки зрения получения и настройки в определенном порядке? – icbytes
@icbytes - нет, это не помогло бы одной йоте. –