当前位置: 首页 > news >正文

衢州哪里有做网站的公司4000-262-/重庆百度推广开户

衢州哪里有做网站的公司4000-262-,重庆百度推广开户,网站开发的进度安排,jsp动态网站开发技术与实践教程在sqlite编程中多线程同时写时会出现异常,我写了个类来解决这个问题。 思路很简单,就是在开始写操作时,记下写操作的托管线程id,表示目前有线程正在做写操作;其他线程来写时,需要先检测是否有进程正在做写操…

在sqlite编程中多线程同时写时会出现异常,我写了个类来解决这个问题。

思路很简单,就是在开始写操作时,记下写操作的托管线程id,表示目前有线程正在做写操作;其他线程来写时,需要先检测是否有进程正在做写操作,如果有就需要等待,等待到某一个配置的超时时间时,会抛出异常终止等待;如果没有则直接放行,此线程可以获得写锁。最后写操作执行完毕时需要释放锁。

下面是具体的代码:

ContractedBlock.gifExpandedBlockStart.gifSQLiteWriteLock
/// <summary>
/// 用于在多线程访问sqlite时防止同步写导致锁文件
/// 
/// 使用方法:
/// using (SQLiteWriteLock sqliteLock = new SQLiteWriteLock(SQLite链接字符串))
/// {
///     //sqlite 写操作代码
/// }
/// 
/// 可以通过在配置文件appSettings节中添加设置 SQLiteWriteLockTimeout 的value值控制锁等待的超时时间,该值必须为正整数数字,单位为毫秒,
/// 默认的超时时间是1000ms
/// </summary>
public sealed class SQLiteWriteLock : IDisposable
{
    
#region 静态字段和属性
    
const short WAIT_TIME = 5;
    
static readonly object locker = new object();
    
static Dictionary<stringint> _dbThreadIdDict = new Dictionary<stringint>();

    
/// <summary>
    
/// 获得写操作的超时时间,单位为毫秒,可以通过配置文件appSettings节中添加设置 SQLiteWriteLockTimeout 的value值控制锁等待的超时时间,该值必须为正整数数字,单位为毫秒
    
/// 默认的超时时间是1000ms
    
/// </summary>
    public static int SQLiteWriteLockTimeout
    {
        
get
        {
            
string configValule = ConfigurationManager.AppSettings["SQLiteWriteLockTimeout"];
            
if (!string.IsNullOrEmpty(configValule))
            {
                
return int.Parse(configValule);
            }
            
return 1000;
        }
    }
    
#endregion

    
private readonly string _connString;

    
//隐藏无参构造函数
    private SQLiteWriteLock() { }

    
public SQLiteWriteLock(string connString)
    {
        _connString 
= connString;
        AcquireWriteLock();
    }

    
#region 私有方法

    
private void AcquireWriteLock()
    {
        
int threadId = Thread.CurrentThread.ManagedThreadId;

        
int waitTimes = 0;
        
while (_dbThreadIdDict.ContainsKey(_connString) && _dbThreadIdDict[_connString] != threadId)
        {
            Thread.Sleep(WAIT_TIME);
            waitTimes 
+= WAIT_TIME;
#if DEBUG
            Console.WriteLine(_connString 
+ " wait for " + waitTimes + " ms");
#endif
            
if (waitTimes > SQLiteWriteLockTimeout)
            {
                
throw new TimeoutException("SQLite等待写操作超时");
            }
        }

        
lock (locker)
        {
            
if (!_dbThreadIdDict.ContainsKey(_connString))
                _dbThreadIdDict.Add(_connString, threadId);
        }
    }

    
private void ReleaseWriteLock()
    {
        
lock (locker)
        {
            
if (_dbThreadIdDict.ContainsKey(_connString))
            {
                _dbThreadIdDict.Remove(_connString);
            }
        }
    }

    
#endregion

    
#region IDisposable 成员

    
public void Dispose()
    {
        ReleaseWriteLock();
    }

    
#endregion
}

 

希望此文有用。

http://www.jmfq.cn/news/5073661.html

相关文章:

  • 重庆做网站建设的公司/站长网站大全
  • 网站怎样做谷歌推广/赣州seo顾问
  • 寺院网站建设/百度推广官网
  • 手机网站建站cms/最新中高风险地区名单
  • 南山网站建设公司/网店怎么开
  • 网站关键词没被搜出来/专业网站seo推广
  • 网站建设就问山东聚搜网络f/酒店网络营销方式有哪些
  • vue做的个人网站/百度竞价推广课程
  • dede生成网站地图/成都疫情最新情况
  • 龙口做网站价格/做网站的外包公司
  • 厦门网站推广步骤机构/代发关键词包收录
  • 能源公司网站建设/如何进行市场推广
  • 电脑做系统网站/网页开发需要学什么
  • 网站定制开发要多久/线上广告投放渠道
  • 做网站霸屏公司销售好做吗/申请域名的方法和流程
  • 杭州模板网站建站/互联网广告推广公司
  • 合肥专门做网站的公司/网络推广优化品牌公司
  • 制作简单的网站/西安专业seo
  • 福田网站建设设计/灰色产业推广引流渠道
  • 软件网站排行榜/关键词优化营销
  • 局域网如何做网站/seo关键词首页排名
  • wordpress主题 手机app/云优化seo软件
  • 达州市做网站/免费网站大全
  • 宿州网站推广/外贸seo网站建设
  • 学校网站做几级等保/网络服务投诉平台
  • 国外购物网站系统/市场推广外包团队
  • 深圳网站建设推荐q479185700顶上/黄页88网络营销宝典
  • 高明网站开发/怎么建造自己的网站
  • 建立网站的程序/网店推广策划方案
  • 网站域名到期时间查询/chatgpt网址