多线程下,如何保证一个线程的一组操作不被中断

mydriverc 2007-09-12 12:59:13
一旦执行了进入了这段代码区,就保证让这段代码全部执行
中间不会被打断,执行完这段代码后,其他线程可以执行。
...全文
952 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcs2007 2007-09-27
  • 打赏
  • 举报
回复
结了 也顶下 学习
蜗牛 强人
mydriverc 2007-09-18
  • 打赏
  • 举报
回复
结贴,给分了。
mydriverc 2007-09-18
  • 打赏
  • 举报
回复
感谢各位,明白那时不可能的。

“在应用层基本上不可能存在要求线程不被抢先的需求。”
ezhuyin 2007-09-17
  • 打赏
  • 举报
回复
赞同蜗牛的看法。其实多线程中,会影响到并发的,最大的因素来自于同步问题。一般说来,加一个锁可以解决大部分的问题。至于线程的排序问题,恕我驽钝,除了用线程间信号之外,暂时想不到别的办法来完成。现在新版本中,Thread.Suspend方法似乎已经不可以用了,如果要暂停一个线程来等待某个线程执行完毕,可用线程信号(参阅ManualResetEvent和AutoResetEvent)。
zk32373139 2007-09-17
  • 打赏
  • 举报
回复
lock(this)
{}
BlueTrees 2007-09-17
  • 打赏
  • 举报
回复
楼上的,从没有任何人说过,事务必须要在一个线程中的。

事务是允许多个线程共同完成的。

事务唯一的特征就是,要么一起提交,要么全部回退。

我看你才不怎么样啊
ttzyanswer 2007-09-17
  • 打赏
  • 举报
回复
问题就是 LZ 的这段代码是放在线程中执行呀..在线程中执行就免不了要线程切换呀..

事务不是数据库才特有的,看来从公务员转过来的确实不怎么样.
ttzyanswer 2007-09-17
  • 打赏
  • 举报
回复
TO BlueTrees(蜗牛)

我很怀疑你的语文能力..究竟你看明白我说的内容了吗?你明白我表达的意思了吗?
我什么时候表示过"事务必须要在一个线程中的"??? 你个大白痴....
he11o 2007-09-17
  • 打赏
  • 举报
回复
我也用过AutoResetEvent进行线程间同步,但是出了一些莫名奇妙的问题,而且又不是每次都发生。我的原则是以后能不用多线程就不用多线程
deally 2007-09-14
  • 打赏
  • 举报
回复
要求线程不被打断?有什么实际意义么?实时监控?lz给个回答看。
不过楼主可以提高线程的优先级试试看。
stonepeter 2007-09-14
  • 打赏
  • 举报
回复
如果是事务的机制的话,看起来和线程没多大关系吧?
ttzyanswer 2007-09-14
  • 打赏
  • 举报
回复
LZ 的意思是这样的(我认为):
比如在线程A中执行的方法中有如下代码段:
1. a=b+c;
2. a++;
....
.....
n. value=a;

LZ 是想 1-n 的代码要么全部一次性执行完成(中间不发生线程切换) 要么都不完成.(有点类似数据库中的事务机制)
xlyyc 2007-09-13
  • 打赏
  • 举报
回复
研究下原子类吧,我用JAVA.
C#不熟悉,应该也有这样的东西
BlueTrees 2007-09-13
  • 打赏
  • 举报
回复
是的,Join就是对等待的封装
taishen 2007-09-13
  • 打赏
  • 举报
回复
顺便请教一下,等待线程句柄是指什么?Join吗?
photoplan 2007-09-13
  • 打赏
  • 举报
回复
蜗牛是很强的
BlueTrees 2007-09-13
  • 打赏
  • 举报
回复
判断线程是不是结束,可以等待线程的句柄,线程也是一个可等待对象,当线程结束时线程对象就处于使能状态了!

一般来说,也不会有什么需求需要等待线程结束的,特别是像.net具有垃圾内存自动回收机制的一般不需要等待线程,一般等待线程结束是为了释放我们自己的程序对线程作的封装所产生的对象。

如果需要等待线程完成某种工作,可以用Event,事件,其他线程等待Event,当线程完成工作后就让Event使能,这样其他线程就可以继续执行。
zhangyu636 2007-09-13
  • 打赏
  • 举报
回复
我的也和楼主一样。总断了
BlueTrees 2007-09-13
  • 打赏
  • 举报
回复
线程保持不中断的理由,只有2个
1、要求严格时间的,这种应用在应用层基本不可能出现。
2、要求对某个共享资源进行保护。

对于2来说,用lock方式保护所有线程可能访问的共享资源就可以了!在应用层基本上不可能存在要求线程不被抢先的需求!!!!!

LZ你压根没懂什么是多线程,只是字面上懂了,离开理解还差一截!!
photoplan 2007-09-13
  • 打赏
  • 举报
回复
我明白,楼主不是说线程同步
可以把线程对象保存为类的成员,在其他线程里判断他的 ThreadState 是不是 Stopped
加载更多回复(10)

110,538

社区成员

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

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

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