【问题标题】:Pooling: Cleanup Pool池化:清理池
【发布时间】:2013-02-14 16:14:08
【问题描述】:

我有一个文件服务器连接池。 (缓存连接的文件服务器) 现在,如果池中有 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;

【问题讨论】:

    标签: multithreading atomic pool resource-cleanup


    【解决方案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

    CLI 规范的第 I 部分第 12.6.6 节规定:“当对一个位置的所有写访问都被访问时,符合标准的 CLI 应保证对不大于本机字大小的正确对齐的内存位置的读写访问是原子的。大小一样。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2015-11-23
      相关资源
      最近更新 更多