并发求助

Kingofcode 2016-10-09 04:35:56
本人技术菜,现公司项目原创人员都已不在,项目虽然上线很久了但是一个问题一直解决不了,没办法技术菜,另外几个同事也是。系统本身是采用C# MVC模式 做的管理项目,由于数据结构设计的比较复杂所以在一些模块某些操作上反应较慢就会报错。如果用的人少 出错的情况基本不会出现,所以我们判断可能是并发的原因,想请教一下比如我一个保存的操作

Public ClassName Save(Class Name,FormCollection collection)
{
_save(...)
{
}
}

我想问的是 比如保存这里容易报错,那么如果使用多线程互斥锁的方式 最简单的例子应该如何写
求教,从未用过多线程 用户大概几百人的样子
多谢多谢
...全文
520 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingofcode 2016-10-11
  • 打赏
  • 举报
回复
感觉还是在纯粹的软件公司好些 有问题不止于很无助 以前都是做C/S的 没做过B/S的 现在B/S的东西 一会报错 一会没有 服务器报错 本机没有 又难以重现 真是头大
编程有钱人了 2016-10-11
  • 打赏
  • 举报
回复
如果实在想不通 就用数据库锁 省事
圣殿骑士18 2016-10-11
  • 打赏
  • 举报
回复
使用lock会导致用户使用排队,用户感觉系统变慢。是忍受系统变慢,还是忍受系统出错,没有两全方案。 可以考虑优化一下你的数据库,还有改进一下代码中的不合理事务
闭包客 2016-10-10
  • 打赏
  • 举报
回复
如果简单粗暴一点,还可以把连接字符串的隔离模式、数据库的隔离模式都调到 Serializable 串行化隔离。
Kingofcode 2016-10-10
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
互斥就是那样使用一个 标志 object 即可。 对于后果,我给你打个比方吧:假设一个仓储式超市有40个收银台同时工作,才能保证顾客基本上能够仅排很短的队伍(不超过10个人)而有序地结账。你现在因为技术不行,一个收银台干完活儿之后就关闭了,然后让另外一个收银台才开放........想想后果。
郁闷 我也是小兵 我们就几个人 现在莫名其妙就落到我头上 领导也不懂技术 连个请教指导的人都没有 感觉好没意思 也不是耍滑头的人 解决不了 总感觉不自在
dp517849241 2016-10-10
  • 打赏
  • 举报
回复
几百人就并发????
  • 打赏
  • 举报
回复
互斥就是那样使用一个 标志 object 即可。 对于后果,我给你打个比方吧:假设一个仓储式超市有40个收银台同时工作,才能保证顾客基本上能够仅排很短的队伍(不超过10个人)而有序地结账。你现在因为技术不行,一个收银台干完活儿之后就关闭了,然后让另外一个收银台才开放........想想后果。
qq_28023843 2016-10-09
  • 打赏
  • 举报
回复
都不管 定义一个全局的静态资源 使用lock加锁这个资源就行了 , 只要资源是相同的 那么就会加锁 ,当然不同的方法就不能使用同一资源了 。。 比如你的save跟upate .. 如果你传递的参数中有在该方法里始终不变的 也可以使用它来作为资源
Kingofcode 2016-10-09
  • 打赏
  • 举报
回复
我们怀疑 报错的原因在于 比如用户A保存001这个单 保存动作由于耗时尚未完成 然后又点了其他的 或者用户B又来保存002这个单才报错 那么我的这个TheLock 应该如何定义 需要复制吗 还是传参 什么的
引用 6 楼 closurer 的回复:
定义一个静态变量:

public static object TheLock;

lock(TheLock)
{
    //这里调用 save 函数
}
Kingofcode 2016-10-09
  • 打赏
  • 举报
回复
引用 5 楼 qq_28023843 的回复:
写错了 lock(obj) 是共享资源的对象 同一对象才会加锁
还是一脸懵逼,糊涂得很 郁闷 我们的项目就是MVC的 拿保存做例子 里面参数主要有要保存的对象 还有其他的 那我要如何做?
闭包客 2016-10-09
  • 打赏
  • 举报
回复
定义一个静态变量:

public static object TheLock;

lock(TheLock)
{
    //这里调用 save 函数
}
qq_28023843 2016-10-09
  • 打赏
  • 举报
回复
写错了 lock(obj) 是共享资源的对象 同一对象才会加锁
Kingofcode 2016-10-09
  • 打赏
  • 举报
回复
引用 3 楼 qq_28023843 的回复:
//共享资源 private static object obj = new object(); Public ClassName Save(Class Name,FormCollection collection) { lock(object){ _save(...) { } } }
这个objece就是这样写 还是说和我的业务有关联的
qq_28023843 2016-10-09
  • 打赏
  • 举报
回复
//共享资源 private static object obj = new object(); Public ClassName Save(Class Name,FormCollection collection) { lock(object){ _save(...) { } } }
Kingofcode 2016-10-09
  • 打赏
  • 举报
回复
引用 1 楼 qq_28023843 的回复:
可以使用加锁。。。
真心不知道如何写,可以帮忙修改一下看看吗
qq_28023843 2016-10-09
  • 打赏
  • 举报
回复
可以使用加锁。。。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧