1
我需要一个身份验证令牌线程和同步安全。令牌将每小时过期,因此需要创建新令牌并将其分配给我的静态变量(TOKEN)此代码线程和同步安全吗?
这是否有用?
感谢,
public static volatile string TOKEN = string.Empty;
public static DateTime TOKEN_TIME = DateTime.Now;
private static readonly object syncRoot = new object();
public static string Get()
{
if (!string.IsNullOrEmpty(TOKEN))
{
if (!TokenIsValid())
{
lock(syncRoot)
TOKEN = CreateNewToken();
}
}
else
{
lock(syncRoot)
TOKEN = CreateNewToken();
}
return TOKEN;
}
“if”分支也会出现同样的情况。作为一种解决方案,我将提供用一个锁来包装整个'Get()'主体。 – zerkms 2010-10-13 02:08:05
更好的性能(仍然只是使用'lock')的例子是使用双重检查锁定:http://en.wikipedia.org/wiki/Double-checked_locking。尽管如此,请仔细阅读那里的注意事项。 – 2010-10-13 02:52:53