您现在的位置: 爱51代码网 >> 范文 >> 文章正文
多线程有没有真正安全又不用lock的方法

lock就要排队,排队就不是多线程?

c#多线程采集数据,我把采集的方法,放到一个类里,新建的线程调用一个类的实例中的方法,这样同时还能传入各种参数,
但是如果不lock,这个过程依然不安全,会导致方法中的变量混乱,
但是lock了,线程就要排队,不是真正的多线程同时执行。

c#到底有没有真正的多线程,又安全的方法呢? 比如,我把执行的过程封装成一个单独的dll,然后每个线程都创建这个dll的实例,这个想法是不是和类其实是一个意思呢 ?   哎。。。。

希望大家能指点一下,

线程是动态创建的
线程同时执行,不用排队
线程传入的参数不同 但是方法相同
线程之间不要干扰 虽然执行同样的方法,但是互不影响
首先类里定义的变量不叫局部变量,叫做成员变量。同一个实例的成员变量只有一个,是共享的。局部变量是在函数中定义的变量,在没有向外传送的时候是安全的。
从某个角度上来说,多线程确实有快不太多——特别是对于那种老式的单核CPU, 只进行那种纯粹的科学计算来说。

换一个比较好理解的例子吧。
来了一车货要卸, 一个人负责把车上的东西一件件地往下搬到商店里(设为任务A), 另一个人负责把这些已经搬下来的东西放在商店的货架上(设为任务B)。

如果设计多线程, 那就让车上的人往下搬的人(任务A)再增加到5个。

好吧, 那你就说了: A的人有5个, B的才1个,那5个人到了B这里, 岂不是要排队了反而变慢?

其实并不是这样, 5个人搬东西的速度并不是一致的, 而且车上到商店还有一段路, 这样会导致不同做A的人到达B的时候并不是在同一时间, 所以排队的机会是很少的。

所以在5个一起做这种比较慢的事情, 速度虽然达不到5倍(偶尔还是得排一下队), 但效率也还是提高了……


你要做数据采集, 应该是从DB里取数据对吧?I/O操作是比较慢的, 比较适合用多线程。

至于你所说的lock , 建议你把思路整理一下, 把最简洁最能表达你思想的代码做成一个能运行的小demo, 然后贴出来。 再让人家去改善, 我想这样会有更多人愿意花点时间来帮你。

没有具体对象地空谈思路, 说不出个所以然来

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    TClientDataSet如何避免多人更新
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    ComboBox手动设置焦点调用窗
    强类型DataSet转成DataTable
    浪微博中@用户的正则表达式
    C#_WinForm文件上传到指定路
    CHARFORMAT结构体为什么要有
    -abort() has been called
    Windows环境下如何编译zxing
    C#如何调用C++写的函数
    问题标签用户C#多态中new 和
    C# 中InlineShapes.AddPictu
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |