社区
C#
帖子详情
一段代码同时只能一个人执行
lvfeng19806001
2011-10-12 04:51:22
代码流程:
清除报表数据库数据(报表有关的表很多)--->通过复杂的逻辑运算插入数据库报表数据--->查询报表数据库并给Excel填入数据
现在要求这个过程同时只能一个人执行,否则后面查询的数据就会不对!
bs程序
这个应该怎么弄?谢谢大家
...全文
1371
48
打赏
收藏
一段代码同时只能一个人执行
代码流程: 清除报表数据库数据(报表有关的表很多)--->通过复杂的逻辑运算插入数据库报表数据--->查询报表数据库并给Excel填入数据 现在要求这个过程同时只能一个人执行,否则后面查询的数据就会不对! bs程序 这个应该怎么弄?谢谢大家
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
48 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
quanziquantao
2011-10-18
打赏
举报
回复
你是担心数据混杂呢还是性能问题?还是担心A处理的数据被B查询到,是不是这个意思?
如果是后一种,你给每次处理的数据加上一个唯一ID,比如sessionid,每个人都只对自己的Sessionid下的数据做处理就可以了。
带着爱远行
2011-10-18
打赏
举报
回复
楼主应该是担心这个业务流程时间消耗太多,怕同一时间其他用户也进行这一操作出问题吧,那么用锁就可以解决。如果我没理解错楼主的意思的话,应该就是并发问题
zhoutiea
2011-10-17
打赏
举报
回复
鄙视38楼~~
zhoutiea
2011-10-17
打赏
举报
回复
方法很重要,实现不重要,想实现一个功能,很好实现,就看你用什么样方法,同样一个功能的sql,两个人写出查询时间是不一样的~~~!!!
samyou
2011-10-17
打赏
举报
回复
重组一下业务流程,应该可以有优化。再谈设计和实现
hxa123456
2011-10-17
打赏
举报
回复
这个问题的本质就是并发问题,怎么处理并发,单例模式可以,lock可以。至于状态改0 、1,这个在用户数量少的情况下也可以,但是在并发度高的情况下,就会有问题。
jtg98g3
2011-10-15
打赏
举报
回复
你的设计本身有问题,你应该好好的分析一下你的需求,然后确定好设计.在谈具体的实现吧.
昵称不能为空噢噢噢噢
2011-10-14
打赏
举报
回复
给表枷锁
卧_槽
2011-10-14
打赏
举报
回复
lock就行了。
苦苦挣扎中
2011-10-14
打赏
举报
回复
[Quote=引用 36 楼 lvfeng19806001 的回复:]
引用 34 楼 zdbb 的回复:
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?
回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如……
[/Quote]
其实只要实现就行,方法不是很重要
不老神仙
2011-10-14
打赏
举报
回复
给方法加锁是最好最简便的方法 lock monitor mutex都可以
lvfeng19806001
2011-10-14
打赏
举报
回复
[Quote=引用 34 楼 zdbb 的回复:]
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?
回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如执行时间不超过3分钟,如果当前时……
[/Quote]
谢谢你的回复,我现在已经用application实现了,一个key存是否锁定状态,一个key存时间,感觉思路和你这个差不多,我想问下我这个有没有什么大的问题?
wcj1018_net
2011-10-14
打赏
举报
回复
lock monitor 单例模式都可以
只在此山中
2011-10-14
打赏
举报
回复
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?
回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如执行时间不超过3分钟,如果当前时间是13:00,表C记录字段时间是12:57,那就表示超时了然后把表C记录删除,没超时就不删。
kevinmartin
2011-10-14
打赏
举报
回复
可惜结贴了
yidongliange4
2011-10-13
打赏
举报
回复
[Quote=引用 3 楼 jinkuang45 的回复:]
用 lock 锁
[/Quote]
锁不行吧 ?多个用户访问的时候IIS给每个访问用户分配的是新的线程新的对象。
在application中加个是否在执行的标志呢?
zzz9413
2011-10-13
打赏
举报
回复
补充,执行操作之前,先判断IsLock状态,
如果没锁,正常操作。
如果锁定,判断锁定人是否在线。锁定人不在线,也可正常操作。(这里冗余设计一下无所谓)
zzz9413
2011-10-13
打赏
举报
回复
不管怎么复杂,只要是对某一条记录操作,都可以用以下方法:
我的做法是数据库设计一个IsLock 和currUser字段。代表谁正在锁定这条记录
开始修改时,先锁定这条记录 updateset 表名 set IsLock ='true',currUser='当前操作用户'
操作结束后
update这条记录set IsLock =‘false’
如果该用户不在线,则自动将该用户锁定的记录解锁
lvfeng19806001
2011-10-13
打赏
举报
回复
[Quote=引用 24 楼 zdbb 的回复:]
在数据库加个操作记录表C,一个用户A操作时判断表记录空则在表C插入操作开始时间记录,这样A可以继续操作到结束,然后删除插入记录。
同时如果用户B操作先判断表C记录,记录不为空无法操作,直到A退出才能操作。
也可以在数据库Agent job中加定时判断操作是否异常,如果异常可以清楚表C记录,避免死锁。
[/Quote]
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?
只在此山中
2011-10-13
打赏
举报
回复
在数据库加个操作记录表C,一个用户A操作时判断表记录空则在表C插入操作开始时间记录,这样A可以继续操作到结束,然后删除插入记录。
同时如果用户B操作先判断表C记录,记录不为空无法操作,直到A退出才能操作。
也可以在数据库Agent job中加定时判断操作是否异常,如果异常可以清楚表C记录,避免死锁。
加载更多回复(27)
可供多线程调用的
只能
有
一个
在
执行
的原子操作实现
该博客展示了可供多线程调用的原子操作实现
代码
。定义了 TAtomOpt 类,包含获取实例、原子操作、设置和清除标志等方法,通过同步机制保证操作的原子性。还创建了 T 类继承 Thread 类,在多线程环境下调用原子操作。
一段
java
代码
是如何
执行
的?
本文详细介绍了Java
代码
从编写到
执行
的全过程,包括编译成class文件、JVM内存区域划分、方法
执行
顺序及栈帧原理,并通过具体示例解释了class文件内部的指令集工作方式。
java中动态
执行
一段
代码
该博客介绍了动态
执行
一段
简单Java
代码
的方法,通过生成Java文件、调用javac编译、反射
执行
的方式实现。给出了详细
代码
,包含创建文件、编译、反射
执行
等方法,并提供了测试示例,不过
代码
有些地方有待完善。
java web开发
一个
帐号同一时间
只能
一个
人登录的功能
本文介绍了如何在Java Web应用中实现
一个
账号同一时间
只能
一个
人登录的功能。主要策略包括:使用ArrayList存储登录用户,设置session过期时间,监听session销毁事件,以及处理浏览器非正常关闭的情况。通过比较sessionId来防止同一账号重复登录。
用matlab写
一段
课堂抽人汇报小
代码
这篇博客分享了
一段
使用Matlab编写的课堂抽人
代码
,只需按回车键即可随机显示
一个
人名,旨在提升课堂互动趣味性。
C#
111,129
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章