如何对一个public的类实例加锁?

ldxab 2010-01-29 09:12:04
好像lock或monitor都不能锁public定义的类型啊,有什么好方法么?
...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
seesea125 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ldxab 的回复:]
我调用一个com组件,因为是非托管资源不能重复实例化,所以在最外面实例一个public static com类供程序中各个类调用,但是我发现当有多个线程同时调用com类时总是报错,我在调用的地方加锁又不好使,我该怎么办呢?
[/Quote]

你可以用变通的方法,设置一个public static int a=0 的全局变量,或者session中也可以,当有实例调用这个com的时候,就设置a=1,所有调用com的地方,先判断a的值,a=0才调用,a=1,就让他先sleep几秒钟
ouc_ajax 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ldxab 的回复:]
楼上说的可以,但我想锁public型com组件,用lock时老出错啊

[/Quote]

无语了...
老大,不是直接让你锁com组件的实例,而是新建个对象,完全就是为了
锁而创建的。。
ldxab 2010-01-30
  • 打赏
  • 举报
回复
我调用一个com组件,因为是非托管资源不能重复实例化,所以在最外面实例一个public static com类供程序中各个类调用,但是我发现当有多个线程同时调用com类时总是报错,我在调用的地方加锁又不好使,我该怎么办呢?
ldxab 2010-01-30
  • 打赏
  • 举报
回复
楼上说的可以,但我想锁public型com组件,用lock时老出错啊
wzp144650 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
private static readonly object Obj = new object;
lock(obj)
[/Quote]

这样肯定可以
ouc_ajax 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flyerwing 的回复:]
引用 1 楼 wuyq11 的回复:
private static readonly object Obj = new object;
lock(obj)

这样不行?

[/Quote]

正解已出!!
看看微软代码吧,也都是这么操作的,为需要加锁的对象定义一个static的object用来枷锁!
flyerwing 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
private static readonly object Obj = new object;
lock(obj)
[/Quote]
这样不行?
vrhero 2010-01-30
  • 打赏
  • 举报
回复
用委托,自己构造一个队列排队...调用线程执行完毕通知下一个排队线程...
ldxab 2010-01-30
  • 打赏
  • 举报
回复
楼上说的有道理,但是比如有五个线程同时调用这个com组件,有一个执行,其余在等待(我用while(true)不停的判断条件,需要时间快,不能睡太久),当一个执行完后,怎么再让那四个线程分开执行呢?当条件成立时,那四个线程会同时通过验证啊?
wuyq11 2010-01-29
  • 打赏
  • 举报
回复
private static readonly object Obj = new object;
lock(obj)

110,571

社区成员

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

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

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