我有一个.net核心剃刀应用程序,该应用程序有一个特殊的用例,在该应用程序中,我需要有一个全局计数器,该计数器将随每个请求而递增,但仍应保持线程安全。
同样在Web应用程序加载时,将使用实体框架从数据库中读取此计数器。
在这种情况下,我认为静态变量不是线程安全的(因为它可以被一个请求读取,然后在另一个请求读取其先前值之后进行修改)
所以我想知道是否需要锁定机制。
答案 0 :(得分:0)
如果您正在从数据库中读取计数器,我认为每个请求都会增加值并将其保存在数据库中?在这种情况下,我更喜欢使用锁定。
这可能是一个幼稚的解决方案,但这是我的解决方法:
private static object _requestLock = new object();
public string UpdateCounter()
{
// it can be as well Config table with lots of different records and one of them would be Counter value
var counter = _dbContext.Counters.FirstOfDefault();
lock (_requestLock)
{
counter.Value++;
}
_dbContext.SaveChanges();
}