Объединение: бассейн очистки

У меня есть пул подключений к файловому серверу. (для кеширования подключенных файловых серверов) Теперь, если в пуле 100 открытых подключений, я хочу очистить через некоторое время.

Я бы сделал уборку через 15 мин. (например, закрыть 20% активных соединений после 15 минут бездействия)

Для этого мне нужно запомнить метку времени последнего входящего запроса. (как статическая переменная)

static DateTime s_lastUse;

//...
UseFileServer()
{
s_lastUse = DateTime.Now;
}
//...
CreateNewConnection()
{
if((DateTime.Now - s_lastUse) > TimeSpan.FromSeconds(900))
{
//do cleanup....
}
}

Возможно ли это в многопоточной архитектуре? Возможно, если две операции записи происходят в одно и то же время, значение в переменной повреждено.

Обеспечивает ли .Net, что эта операция записи является атомарной?

s_lastUse = DateTime.Now;

person user437899    schedule 14.02.2013    source источник


Ответы (1)


Кажется, что это атомарно: http://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf

Раздел I, раздел 12.6.6 спецификации интерфейса командной строки гласит: «Соответствующий интерфейс командной строки должен гарантировать, что доступ для чтения и записи к правильно выровненным ячейкам памяти, не превышающим собственный размер слова, является атомарным, когда все операции записи в ячейку имеют одинаковый размер. . "

person user437899    schedule 15.02.2013