关于多线程同步的问题

tuyile006 2008-10-04 10:29:19
不知道大家在处理多线程的时候是用什么对象做同步锁的。
以前用一个string类型,如:

object syncObj=(object)"aaa";

lock(syncObj)
{
……
}

如果有多个不同的类也用"aaa"做同步锁,那么所有线程都会被锁住。
后来只好改成用lock(this)了,但又觉得lock(this)粒度不够。
不知道大家怎么用的,交流者有分

...全文
162 18 打赏 收藏 转发到动态 举报
写回复
用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,就木问题

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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