我用了静态锁 为什么出现编号相同的

问题描述

publicstaticobjecto=newobject();//属性lock(o){try{if(!string.IsNullOrEmpty(context.Request.Params["ext4"])){av.Age=int.Parse(context.Request.Params["ext4"]);}av.ParentTel=context.Request.Params["ext6"];av.Votes=0;av.PlayerNum=App_VoteInfo.GetMax(ac.VoteId)+1;//获得最大的编号,并加1av.Audited=ac.AutoAudit;av.Description=context.Request.Form["ext10"];av.CreateDate=DateTime.Now;av.PicUrl1=MakePic(context.Request.Form["ext7"],context,ac);av.PicUrl2=MakePic(context.Request.Form["ext8"],context,ac);av.PicUrl3=MakePic(context.Request.Form["ext9"],context,ac);if(string.IsNullOrEmpty(av.PicUrl1)&&string.IsNullOrEmpty(av.PicUrl2)&&string.IsNullOrEmpty(av.PicUrl3)){thrownewException("没有照片");}if(ac.BaoMingGuanZhu){av.OpenId=context.Request.Cookies["openid"].Value;}av.Save();}catch(Exceptionex){//LogManager.getInstance().getLogger(this.GetType()).Error(ex);error=true;}}

照理不会重复,编号只会越来越大,实际上操作,仍然有少量重复的。怎么回事。

解决方案

解决方案二:
publicstaticobjecto=newobject();//属性这句话是在类里做为属性声明并实例化的。不是在方法体里临时实例化的。
解决方案三:
App_VoteInfo.GetMax(ac.VoteId)+1;锁地方放错了,应放GetMax里。还有ac.Voteld是啥为毛参数传进去。。
解决方案四:
缺乏上下文,没法判断
解决方案五:
引用2楼wyd1520的回复:

App_VoteInfo.GetMax(ac.VoteId)+1;锁地方放错了,应放GetMax里。还有ac.Voteld是啥为毛参数传进去。。

就是取这个最大活动的最大id啊,ac.Voteld是活动的id
解决方案六:
根据你的描述,是不能分析出如何设计程序的。因为你不愿意说明主要的程序机制。正如#2所说,如果你只是空洞地讲一下App_VoteInfo.GetMax(ac.VoteId)的概念,是不能分析出为什么它查询出错的。并且因为这个毛病,其实你也可能已经滥用了lock,在过大的范围使用lock。这会严重影响程序并发处理的效率。
解决方案七:
这静态变量放错地方了吧,应该放入Application
解决方案八:

解决方案九:
publicstaticintGetMax(intvoteid){Queryq=App_VotePlayer.CreateQuery();q.AddWhere(App_VotePlayer.Columns.VoteId,voteid);objecto=q.GetMax(App_VotePlayer.Columns.PlayerNum);if(o==null){return0;}elseif(o.ToString()==""){return0;}else{returnint.Parse(o.ToString());}}

以上是App_VoteInfo.GetMax的方法体
解决方案十:

解决方案十一:
av是什么gui?跟App_VotePlayer有什么关系?保存av后,在那里更新max?
解决方案十二:
如是max在别的地方更新,那就可能存在你说的重复问题
解决方案十三:
你将锁的范围缩小到只锁必要的部分看看呢还有你确认你这个新增只有这一个入口,是否还存在其它代码也在执行Insert操作if(ac.BaoMingGuanZhu){av.OpenId=context.Request.Cookies["openid"].Value;}lock(o){av.PlayerNum=App_VoteInfo.GetMax(ac.VoteId)+1;//获得最大的编号,并加1av.Save();}

时间: 2024-10-03 13:05:50

我用了静态锁 为什么出现编号相同的的相关文章

用RedHat打造安全高效的代理服务器

Linux具有安全.高效.廉价的优点,但大家对它一直有难以使用的印象.其实,随着Linux的不断发展,它的易用性已大有改观.采用Linux操作系统,可使一台配置赛扬400MHz CPU.256MB内存的机器,用ADSL带动两三百台电脑上网成为轻而易举的事.下面就以RedHat 8.0和Squid为例,教你打造一个安全.高效的服务器. 配置服务器上网 首先要使服务器能上网.为了提高服务器的效率,一般要用双网卡,一块连接内部局域网,一块用来连接互联网.下面让我们来看看连接ADSL类宽带的方法. 1.

LINUX下架设代理服务器

在架设之前,让我们先来了解一下代理服务器的特点.我们这样来理解代理服务器:假设电脑A需要电脑B的数据,电脑A先与电脑C建立连接,电脑C接收到电脑A的数据请求后,再与电脑B建立连接,下载电脑A所请求的数据后再将此数据传送到电脑A,电脑C就称之为代理服务器. 代理服务器的作用可以概述为三方面: 一是通过代理服务器可以访问一些对IP有限制的网站: 二是可以当做防火墙使用: 三是可以很好隐藏自己真实IP,提高安全性. 接下来我们一起来看看架设步骤. 一.配置LINUX上网 第一步:单击"开始-系统工具-

Java并发结构

原文链接:http://gee.cs.oswego.edu/dl/cpj/mechanics.html 作者:Doug Lea 译者:萧欢  校对:方腾飞 内容 线程 同步 监视器 线程 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源).java.lang.Thread对象负责统计和控制这种行为. 每个程序都至少拥有一个线程-即作为Java虚拟机(JVM)启动参数运行在主类main方法的线程.在Java虚拟机

在LINUX环境下架设代理服务器的方法

代理服务器在目前的http://www.aliyun.com/zixun/aggregation/16327.html">网络环境中应用较广,并在Internet里扮演着一个很重要的角色.今天我就给大家介绍一种在LINUX环境下架设代理服务器的方法,希望能够对各位朋友有所帮助. 代理服务器简介 在架设前,让我们先来了解一下代理服务器的特点.我们这样来理解代理服务器,假设电脑A需要电脑B的数据,电脑A先与电脑C建立连接,电脑C接收到电脑A的数据请求后,再与电脑B建立连接,下载电脑A所请求的数

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

[Java] 方法锁、对象锁和类锁的意义和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 首先的明白Java中锁的机制 synchronized  在修饰代码块的时候需要一个reference对象作为锁的对象.  在修饰方法的时候默认是当前对象作为锁的对象.  在修饰类时候默认是当前类的Class对象作为锁的对象.   线程同步的方法:sychronized.lock.reentrantLock分析 方法锁(synchronized修饰方法时) 通过在方法声明中加入 synchronized关键字来声明 synch

互斥锁和条件变量

为了允许在线程或进程之间共享数据,同步时必须的,互斥锁和条件变量是同步的基本组成部分. 1.互斥锁 互斥锁是用来保护临界区资源,实际上保护的是临界区中被操纵的数据,互斥锁通常用于保护由多个线程或多进程分享的共享数据.一般是一些可供线程间使用的全局变量,来达到线程同步的目的,即保证任何时刻只有一个线程或进程在执行其中的代码.一般加锁的轮廓如下: pthread_mutex_lock() 临界区 pthread_mutex_unlock() 互斥锁API pthread_mutex_lock(pth

哪个对象才是锁?

我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁.这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么才算你彻底搞明白了哪个对象才是锁? 静态同步方法问题 如下代码是两个静态同步方法 查看源代码 打印帮助 01 Class A{ 02   03 public static synchronized void write(boolean b){ 04   isTrue = b; 05 } 06   07 public st

用静态URL映射动态网页

动态生成的网页在构造真正大型的网站时是不可缺少的.但是,动态页面的名字(即它的URL)往往缺乏明确的含义.例如,名为product.ASP?Id=4的页面总不如名为/applicances/dishwashers/Model3809.htm的页面来得好记.本文介绍如何实现静态页面名字和动态页面的映射.  概述   静态页面名字除了具有含义更明确这一优点之外,它的另外一个优点在于搜索引擎能够索引这些页面.大多数搜索引擎,如Alta Vista和Yahoo,不会检索URL中带有问号的页面,因为它们担