池:清理池

时间:2013-02-14 16:14:08

标签: multithreading atomic pool resource-cleanup

我有一个文件服务器连接池。 (缓存连接的文件服务器) 现在,如果池中有100个打开的连接,我想在一段时间后清理。

我会在15分钟后进行清理。 (例如,在15分钟不活动后关闭20%的活动连接)

为此我需要记住最后一次收到请求的时间戳。 (作为静态变量)

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;

1 个答案:

答案 0 :(得分: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

CLI规范第12.6.6节的分区I指出:“符合要求的CLI应保证在对位置的所有写入访问都是对原始字大小不大时,对正确对齐的内存位置的读写访问权限是原子的。大小相同。“