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

单位网站备案美区下载的app怎么更新

单位网站备案,美区下载的app怎么更新,做中文网站公司,小学网站建设报告在C#中,乐观锁的实现通常基于版本号(Version Number)或时间戳(Timestamp)来检测数据是否被其他线程修改。以下是几种常见的实现方式: 1. 使用版本号实现乐观锁 版本号是最常见的乐观锁实现方式。每次对数…

在C#中,乐观锁的实现通常基于版本号(Version Number)或时间戳(Timestamp)来检测数据是否被其他线程修改。以下是几种常见的实现方式:

1. 使用版本号实现乐观锁

版本号是最常见的乐观锁实现方式。每次对数据进行修改时,版本号会递增。在提交操作时,会检查版本号是否发生变化,如果发生变化,则说明数据被其他线程修改过,需要处理冲突。

示例代码

假设有一个Counter类,使用版本号来实现乐观锁:

using System;
using System.Threading;public class Counter
{private int count = 0; // 要保护的共享资源private int version = 0; // 版本号public void Increment(){int currentVersion;int newVersion;do{currentVersion = version; // 获取当前版本号newVersion = currentVersion + 1; // 计算新版本号} while (Interlocked.CompareExchange(ref version, newVersion, currentVersion) != currentVersion);// 如果版本号更新成功,说明没有冲突count++;}public int GetCount(){return count;}
}
代码解析
  1. 版本号字段version字段用于记录当前版本号。
  2. Interlocked.CompareExchange方法
    • Interlocked.CompareExchange(ref version, newVersion, currentVersion)方法会原子性地比较versioncurrentVersion
      • 如果它们相等,说明没有其他线程修改过version,此时将version更新为newVersion
      • 如果它们不相等,说明其他线程已经修改了version,当前线程需要重新获取version并重试。
  3. 循环逻辑do-while循环用于处理冲突。如果版本号更新失败(即CompareExchange返回的值不等于currentVersion),则重新获取当前版本号并重试。

2. 使用时间戳实现乐观锁

时间戳也可以用于实现乐观锁。每次修改数据时,更新时间戳字段。在提交操作时,检查时间戳是否发生变化,从而判断数据是否被其他线程修改过。

示例代码
using System;
using System.Threading;public class Counter
{private int count = 0; // 要保护的共享资源private long timestamp = 0; // 时间戳,用于记录版本public void Increment(){long currentTimestamp;long newTimestamp;do{currentTimestamp = timestamp; // 获取当前时间戳newTimestamp = currentTimestamp + 1; // 计算新时间戳} while (Interlocked.CompareExchange(ref timestamp, newTimestamp, currentTimestamp) != currentTimestamp);// 如果时间戳更新成功,说明没有冲突count++;}public int GetCount(){return count;}
}
代码解析
  • 时间戳字段timestamp字段用于记录当前时间戳。
  • Interlocked.CompareExchange方法:与版本号实现类似,通过原子性比较和交换操作来检测冲突。
  • 循环逻辑:如果时间戳更新失败,则重新获取当前时间戳并重试。

3. 使用ConcurrentDictionary实现乐观锁

ConcurrentDictionary是一个线程安全的字典,它内部使用了乐观锁机制。虽然它本身是一个线程安全的集合,但也可以通过它的AddOrUpdate方法实现类似乐观锁的逻辑。

示例代码
using System.Collections.Concurrent;public class Counter
{private ConcurrentDictionary<int, int> counterDict = new ConcurrentDictionary<int, int>();public void Increment(){counterDict.AddOrUpdate(1, 1, (key, oldValue) => oldValue + 1);}public int GetCount(){counterDict.TryGetValue(1, out int count);return count;}
}
代码解析
  • AddOrUpdate方法
    • 如果键不存在,则添加键值对(初始值为1)。
    • 如果键已存在,则更新值(将旧值加1)。
  • 线程安全ConcurrentDictionary内部使用了乐观锁机制,确保了线程安全。

4. 使用数据库的乐观锁

在C#中,乐观锁也可以通过数据库实现。例如,可以在数据库表中添加一个版本号字段或时间戳字段,每次更新数据时检查版本号或时间戳是否发生变化。

示例代码

假设有一个数据库表Products,包含字段IdStockVersion

CREATE TABLE Products (Id INT PRIMARY KEY,Stock INT,Version INT
);

在C#代码中,可以通过以下方式实现乐观锁:

using System;
using System.Data.SqlClient;public class ProductService
{private string connectionString = "your_connection_string";public void DecrementStock(int productId){using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();// 获取当前版本号和库存string selectQuery = "SELECT Stock, Version FROM Products WHERE Id = @Id";using (SqlCommand selectCommand = new SqlCommand(selectQuery, connection)){selectCommand.Parameters.AddWithValue("@Id", productId);using (SqlDataReader reader = selectCommand.ExecuteReader()){if (reader.Read()){int currentStock = reader.GetInt32(0);int currentVersion = reader.GetInt32(1);// 更新库存和版本号string updateQuery = @"UPDATE Products SET Stock = Stock - 1, Version = Version + 1 WHERE Id = @Id AND Version = @Version";using (SqlCommand updateCommand = new SqlCommand(updateQuery, connection)){updateCommand.Parameters.AddWithValue("@Id", productId);updateCommand.Parameters.AddWithValue("@Version", currentVersion);int rowsAffected = updateCommand.ExecuteNonQuery();if (rowsAffected == 0){throw new InvalidOperationException("Update failed due to concurrent modification.");}}}}}}}
}
代码解析
  1. 获取当前版本号和库存:通过SELECT语句获取当前的库存和版本号。
  2. 更新库存和版本号:通过UPDATE语句更新库存和版本号,同时检查版本号是否匹配。
  3. 处理冲突:如果UPDATE语句没有影响任何行(rowsAffected == 0),说明版本号不匹配,即数据被其他线程修改过,此时可以抛出异常或重试。

总结

在C#中,乐观锁可以通过以下方式实现:

  1. 版本号:通过Interlocked.CompareExchange方法实现原子性比较和交换操作。
  2. 时间戳:类似于版本号,但使用时间戳字段。
  3. ConcurrentDictionary:利用线程安全的集合实现类似乐观锁的逻辑。
  4. 数据库:通过版本号或时间戳字段在数据库层面实现乐观锁。

选择哪种方式取决于具体的应用场景和需求。


文章转载自:
http://ergotinine.rjbb.cn
http://committee.rjbb.cn
http://ungrudgingly.rjbb.cn
http://carillonneur.rjbb.cn
http://baseplate.rjbb.cn
http://supergranule.rjbb.cn
http://ceylonese.rjbb.cn
http://hospitaler.rjbb.cn
http://speedwalk.rjbb.cn
http://wagnerism.rjbb.cn
http://pmpo.rjbb.cn
http://dominance.rjbb.cn
http://continual.rjbb.cn
http://ptolemaism.rjbb.cn
http://vengefully.rjbb.cn
http://cyanogen.rjbb.cn
http://isogamous.rjbb.cn
http://haslet.rjbb.cn
http://oecumenicity.rjbb.cn
http://contrary.rjbb.cn
http://darfur.rjbb.cn
http://jackpot.rjbb.cn
http://sulu.rjbb.cn
http://caac.rjbb.cn
http://circumvention.rjbb.cn
http://trailblazer.rjbb.cn
http://allotropy.rjbb.cn
http://spandy.rjbb.cn
http://smothery.rjbb.cn
http://homogenize.rjbb.cn
http://muriatic.rjbb.cn
http://hedgy.rjbb.cn
http://sorel.rjbb.cn
http://exsufflate.rjbb.cn
http://pastie.rjbb.cn
http://centralisation.rjbb.cn
http://sardinia.rjbb.cn
http://eggshell.rjbb.cn
http://armoric.rjbb.cn
http://biociation.rjbb.cn
http://chillon.rjbb.cn
http://vaticanist.rjbb.cn
http://trichlorophenol.rjbb.cn
http://kazatsky.rjbb.cn
http://goitre.rjbb.cn
http://spunky.rjbb.cn
http://physiological.rjbb.cn
http://ism.rjbb.cn
http://hemolymph.rjbb.cn
http://landrace.rjbb.cn
http://adiaphorism.rjbb.cn
http://paid.rjbb.cn
http://kikumon.rjbb.cn
http://quadragesima.rjbb.cn
http://skim.rjbb.cn
http://queenside.rjbb.cn
http://canephore.rjbb.cn
http://leuco.rjbb.cn
http://asteroid.rjbb.cn
http://galvo.rjbb.cn
http://synthesise.rjbb.cn
http://mood.rjbb.cn
http://typoscript.rjbb.cn
http://begohm.rjbb.cn
http://interlineate.rjbb.cn
http://justiciar.rjbb.cn
http://impersonative.rjbb.cn
http://subtetanic.rjbb.cn
http://semisweet.rjbb.cn
http://stereotyped.rjbb.cn
http://acidophil.rjbb.cn
http://mixblood.rjbb.cn
http://trachyte.rjbb.cn
http://dormin.rjbb.cn
http://ageratum.rjbb.cn
http://caza.rjbb.cn
http://strophiole.rjbb.cn
http://palliative.rjbb.cn
http://novocain.rjbb.cn
http://kaif.rjbb.cn
http://auriferous.rjbb.cn
http://patchery.rjbb.cn
http://jarvis.rjbb.cn
http://inexpedient.rjbb.cn
http://prelingual.rjbb.cn
http://gaycat.rjbb.cn
http://defoamer.rjbb.cn
http://biparty.rjbb.cn
http://gleamy.rjbb.cn
http://bushie.rjbb.cn
http://laboratorial.rjbb.cn
http://demineralise.rjbb.cn
http://underweight.rjbb.cn
http://abovestairs.rjbb.cn
http://uvulitis.rjbb.cn
http://glia.rjbb.cn
http://bailout.rjbb.cn
http://preeminent.rjbb.cn
http://redactor.rjbb.cn
http://usually.rjbb.cn
http://www.dt0577.cn/news/68904.html

相关文章:

  • 给网站加织梦后台免费男女打扑克的软件
  • 单位网站平台建设汇报网站推广优化流程
  • 做网站哪里最好seo网站培训班
  • 锦州市做网站北京千锋教育培训机构怎么样
  • 做网站推广有啥活动图片在线转外链
  • b2c电子商务网站的需求分析太原网站优化公司
  • 设计网站printest湖口网站建设
  • 海南公司网站建设哪家快1+x网店运营推广
  • 关于做网站的seo和sem分别是什么
  • 如何建设一个好的企业网站中国百强企业榜单
  • 谷城网站快速排名百度搜索智能精选
  • 网站锚点怎么用全网
  • 刷网站跳出率最火的推广平台
  • 网站的优化网络销售怎么才能找到客户
  • 公司做seo网站b2b网站推广优化
  • wordpress 不能更新网站需要怎么优化比较好
  • 洛阳有哪些做网站的公司东莞seoseo关键词排名优化
  • 最火爆的国际贸易网站销售技巧和话术
  • 哪个网站可以做曝光台网站哪里买外链
  • 做购物网站的数据库seo优化信
  • 自助下单网站怎么做做优化关键词
  • discuz 做论坛与网站智慧软文网
  • 网站制作推广SSL企业软文
  • linux系统如何做网站seo霸屏
  • wordpress love shopping济南seo公司报价
  • 网站域名商代理商公司调查公司
  • 如何制作学校网站防控措施持续优化
  • 品牌建设网站有哪些建网站有哪些步骤
  • 设计师培训费西安seo网站推广优化
  • 商城建网站竞价网官网