在使用socket编程的时候发生数据丢失问题,一直以为是网络原因,后来测试后发现是多线程操作同一数据源又未加入数据锁导致。

  直接上代码,下面程序执行的结果可能出现198、199、200。两个线程统一时间读取iCount的值,各自计算完累加,再把值重新写入到iCount,当这种情况发生时,一个i++就漏掉了,从而导致最终值的不确定性。

         private int iCount = ;
private void main()
{
Thread thread_iCountAdd1 = new Thread(iCountAdd);
Thread thread_iCountAdd2 = new Thread(iCountAdd);
thread_iCountAdd1.Start();
thread_iCountAdd2.Start();
}
private void iCountAdd()
{
for(int iTemp = ; iTemp < ; iTemp++)
{
iCount++;
}
}

  解决办法是加锁,代码如下:

         private int iCount = ;
private object iCountObject = new object();
private void main()
{
Thread thread_iCountAdd1 = new Thread(iCountAdd);
Thread thread_iCountAdd2 = new Thread(iCountAdd);
thread_iCountAdd1.Start();
thread_iCountAdd2.Start();
}
private void iCountAdd()
{
for(int iTemp = ; iTemp < ; iTemp++)
{
lock (iCountObject)
{
iCount++;
}
}
}

  

最新文章

  1. SQLServer2005如何批量修改架构名 - wuxiaokaixinguo的专栏
  2. 常用语句if,for,while
  3. AJAX笔试面试题汇总
  4. (easy)LeetCode 205.Reverse Linked List
  5. 安装mongodb后服务启动不了的问题
  6. js深入研究之扩展类,克隆对象,混合类(自定义的extend函数,clone函数,与augment函数)
  7. idea maven 无法加载已经安装的模块
  8. input输入框限制输入正整数、小数、字母、文字
  9. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
  10. Studio 5000 指针(间接寻址)编程
  11. WCF服务could not be activated
  12. Linux三剑客grep、sed、awk
  13. grep与正则表达式的使用
  14. java进行3DES加解密
  15. centos7下快速安装Nginx服务器
  16. html垂直居中
  17. 中式台球 规则 ( ChinaBilliards )
  18. 【JavaScript】read_line()、print()实现输入输出
  19. Jmeter遇到Connection reset by peer的解决方法
  20. 【转】webpack中关于source map的配置

热门文章

  1. (一)Lua脚本语言入门
  2. [工作总结] QA小鸟一年了
  3. Swift3.0 中 Strings/Characters 闲聊
  4. Linux实战教学笔记14:用户管理初级(下)
  5. android学习2——RelativeLayout
  6. configparser配置文件模块
  7. struts2.5框架使用通配符指定方法(常见错误)
  8. loadrunner测试结果分析
  9. keepalived配置文件
  10. LAMP部署