2013-02-14 5 views
0

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

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

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

static DateTime s_lastUse; 

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

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

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

s_lastUse = DateTime.Now; 

ответ

0

, кажется, должна быть атомарной: 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 из CLI спецификации состояний: «Соответствующий CLI гарантирует, что чтение и запись доступа к надлежащим выровненные ячейки памяти, не превышающие размер родного слова, являются атомарными, когда все обращения к записи в местоположении имеют одинаковый размер ».