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