社区
C#
帖子详情
关于多线程同步的问题
tuyile006
2008-10-04 10:29:19
不知道大家在处理多线程的时候是用什么对象做同步锁的。
以前用一个string类型,如:
object syncObj=(object)"aaa";
lock(syncObj)
{
……
}
如果有多个不同的类也用"aaa"做同步锁,那么所有线程都会被锁住。
后来只好改成用lock(this)了,但又觉得lock(this)粒度不够。
不知道大家怎么用的,交流者有分
...全文
162
18
打赏
收藏
关于多线程同步的问题
不知道大家在处理多线程的时候是用什么对象做同步锁的。 以前用一个string类型,如: object syncObj=(object)"aaa"; lock(syncObj) { …… } 如果有多个不同的类也用"aaa"做同步锁,那么所有线程都会被锁住。 后来只好改成用lock(this)了,但又觉得lock(this)粒度不够。 不知道大家怎么用的,交流者有分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wugamp
2008-10-06
打赏
举报
回复
楼主请注意:实际上,“多线程同步”和“双线程同步”之间并无本质区别,仅仅两个线程同样可以导致死锁。因此,你的着眼点不应该是有几个线程,而是有多少个“共享数据”。
有一个很简单而且可以提高代码可维护性的方法:
1、搞清楚有多少数据需要共享,假设有A、B、C。
2、把它们分组,例如A和B总是同时被一个线程操作,不可能“分家”,那就把它们作为一组。
3、为每组设定一个互斥信号量:SignalAB,SignalC等
4、每个线程里,通过对相应的信号量操作,实现同步。
HimeTale
2008-10-06
打赏
举报
回复
public void Function()
{
object lockThis = new object ();
lock (lockThis)
{
// Access thread-sensitive resources.
}
}
SyncRoot可以使用 引用类型的 私有或受保护 成员,但别用字符串.
zt_100094
2008-10-06
打赏
举报
回复
实际上,“多线程同步”和“双线程同步”之间并无本质区别,仅仅两个线程同样可以导致死锁。因此,你的着眼点不应该是有几个线程,而是有多少个“共享数据”。
有一个很简单而且可以提高代码可维护性的方法:
1、搞清楚有多少数据需要共享,假设有A、B、C。
2、把它们分组,例如A和B总是同时被一个线程操作,不可能“分家”,那就把它们作为一组。
3、为每组设定一个互斥信号量:SignalAB,SignalC等
4、每个线程里,通过对相应的信号量操作,实现同步。
modelbaby5
2008-10-06
打赏
举报
回复
[Quote=引用 11 楼 wugamp 的回复:]
楼主请注意:实际上,“多线程同步”和“双线程同步”之间并无本质区别,仅仅两个线程同样可以导致死锁。因此,你的着眼点不应该是有几个线程,而是有多少个“共享数据”。
有一个很简单而且可以提高代码可维护性的方法:
1、搞清楚有多少数据需要共享,假设有A、B、C。
2、把它们分组,例如A和B总是同时被一个线程操作,不可能“分家”,那就把它们作为一组。
3、为每组设定一个互斥信号量:SignalAB,SignalC等
4、每…
[/Quote]
这个方法不错!
viki117
2008-10-06
打赏
举报
回复
多线程,学习学习
brallow
2008-10-06
打赏
举报
回复
我说几个:
1:我觉得尽量不要使用string类型来锁定,因为string类型在处理的时候可能会比较麻烦。其实你完全可以:
object syncObj=new object();
2:似乎在很多地方都不太推荐使用lock(this),不过这并不是因为锁定的粒度,而是其它可能导致锁定范围或者死锁之类的原因。
一般我都是在类的内部使用一个专门的syncObject对象来处理锁定。很多时候,一个线程安全的类也不用把锁暴露给外部,自己在方法和属性中加锁就可以了。
wocow2316
2008-10-06
打赏
举报
回复
up
ximi82878
2008-10-06
打赏
举报
回复
路过学习。偶也不知道
IMAGSE
2008-10-05
打赏
举报
回复
顶一下~
花落_
2008-10-05
打赏
举报
回复
不好意思,我没别的意思,是这里网速有点慢,我刷新了好几次,谁知都发成功了,真的不好意思。。。。。
请大家原凉!
花落_
2008-10-05
打赏
举报
回复
http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
在这里...
花落_
2008-10-05
打赏
举报
回复
http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
可以看kan
花落_
2008-10-05
打赏
举报
回复
http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
花落_
2008-10-05
打赏
举报
回复
http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
花落_
2008-10-05
打赏
举报
回复
这里有一编,不错,你也看看吧
shanying_0
2008-10-05
打赏
举报
回复
路过学习。偶也不知道
NowtAngell
2008-10-04
打赏
举报
回复
UP,呵呵
shalen520
2008-10-04
打赏
举报
回复
object syncObj=new object();
lock(syncObj)
{
……
}
只要syncObj不是static,就木问题
JAVA多线程精讲下
线程的同步(线程安全
问题
)l 线程的死锁l 线程间通信l 线程组l 线程池l 多线程的第三种实现方案l 匿名内部类方式使用多线程l 定时器的使用l 多线程面试题
秒杀多线程第四篇 一个经典的多
线程同步
问题
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个
问题
涉及到线程的同步和互斥,是一道非常有代表性的多
线程同步
问题
,如果能将这个
问题
搞清楚,那么对多
线程同步
也就打下了良好的基础。 程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) -> 全局变量++ ->
【多线程】
线程同步
问题
的三种解决方法
目录一、前言二、同步代码块三、同步方法四、Lock方法五、总结 一、前言 解决
线程同步
问题
有三种方式:同步代码块、同步方法、锁(JDK5新增) 使用synchronized 解决
线程同步
问题
要时时刻刻注意要使用同一个同步监视器,特别是在继承创建多线程是要格外注意。 二、同步代码块 1、语法 synchronized(同步监视器){ 需要被同步的代码 } 2、对语法的说明 需要被同步的代码就是操作共享数据的代码 同步监视器可以是任何类的对象,但必须是唯一的 实现创建多线程的案
Java多线程之
线程同步
线程同步
线程同步
:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现
线程同步
的方法有很多。 为什么要创建多线程? 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。 为什么要
线程同步
多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的
问题
,写入数据会被多次的覆盖,所以就要使
线程同步
。 例如:我们去银行存钱,那肯.
秒杀多线程第六篇 经典
线程同步
事件Event
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多
线程同步
问题
》《秒杀多线程第五篇 经典
线程同步
关键段CS》 上一篇中使用关键段来解决经典的多
线程同步
互斥
问题
,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个
线程同步
问题
。首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章