社区
C#
帖子详情
正在进行原子操作的线程能否处于阻塞状态
asggg
2006-04-09 09:59:37
正在进行原子操作的线程能否处于阻塞状态?还是会把该原子操作运行完后该线程才能处于阻塞状态?
...全文
1172
36
打赏
收藏
正在进行原子操作的线程能否处于阻塞状态
正在进行原子操作的线程能否处于阻塞状态?还是会把该原子操作运行完后该线程才能处于阻塞状态?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
36 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SeekTruth
2007-03-09
打赏
举报
回复
能被阻塞的就不能称为原子操作了吧
fxyj2008
2007-01-25
打赏
举报
回复
晕,首先你就没搞明白什么是原子操作,原子操作是不可以被中断了,一般的原子操作是单条指令,是在一个指令周期内!CPU在一条指令执行玩才会去判断是否有中断请求
zxd1984
2006-12-15
打赏
举报
回复
晕.我就是认为原子操作是可以被中断的.
---------------------------------------------
既然你都“就是”认为,那还用讨论么?
charles_y
2006-12-15
打赏
举报
回复
原子操作被中断后cpu去干什么呢?
如果该去执行其他的操作,那你想想这个原子操作还可以作为互斥锁之类的东西用吗?
fnzh
2006-12-14
打赏
举报
回复
阻塞是一种线程状态,原子操作是线程处于执行状态时的一段不被中断的过程。两者跟本根本搭不上边
savagegan
2006-12-06
打赏
举报
回复
我就是认为原子操作是可以被中断的.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
不知道搂住还记不记得apue中关于原子操作的描述??
下面是在网上引用的两句话(和apue上的意思一样):
"所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。";“它们都使用汇编语言实现,因为C语言并不能实现这样的操作。”
我无法想象CPU控制权会把所有时间都在等某个进程的某个线程的原子操作的完成才释放.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
当中断发生时,cpu都会把控制权交给该中断例程,屏蔽其它所有的任务(包括中断),更何况是对一个逻辑上来说更重要的“原子操作”??
如果你还无法想象,那菜鸟小弟我劝你转行……
loveisbug
2006-09-26
打赏
举报
回复
呵呵,他牛角尖钻得厉害。
hchf_1
2006-07-20
打赏
举报
回复
ericzhangali(另一个空间) 的答案已经很明确了呵。
加锁解锁的那个步骤是原子操作的,这就足够了。对于被加锁的临界区的操作不一定要求原子操作的,加了锁以后就算这段临界区的操作被阻塞了别的进程在没拿到锁之前也不能访问。
所以你这个问题问的就有问题,弄混了原子操作呵线程的概念。
原子操作只是一个操作,线程是一系列的操作,原子操作只是线程中的一部操作而已。
anguxiang
2006-06-18
打赏
举报
回复
计算机中的所谓“原子操作“是跟竞争有着密切关系的一个概念,例如,竞争同一个资源。如果要是不存在这种竞争关系的两个线程,是可以中断任意的线程的。在做原子操作的时候通常要上锁,上锁的目的就是因为在做这一原子操作的时候可能会被其他的线程修改共享着的竞争资源,如果不上锁的话,可能引起两个线程同时在修改一个变量,而彼此不知道此变量被彼此都在改动,这样,就导致了程序逻辑上的紊乱,打破了现实世界的顺序性,从而导致不期的结果,所以只要是不存在竞争的线程,那么也就无所谓原子,即便是上锁,也可能被系统随时切换出cpu.
dlzhangln
2006-04-12
打赏
举报
回复
同意 ericzhangali(另一个空间) 的说法,同时希望此帖到此搁笔。望看帖之人一笑而过。请高抬贵手,并点击“关闭窗口”
晨星
2006-04-12
打赏
举报
回复
那好吧,偶就是认为你是错的,哈哈。
asggg
2006-04-12
打赏
举报
回复
晕.我就是认为原子操作是可以被中断的.
我无法想象CPU控制权会把所有时间都在等某个进程的某个线程的原子操作的完成才释放.
loveisbug
2006-04-11
打赏
举报
回复
楼主,已经有几个人给了你不错的回答,可似乎你还在牛角尖里。
好好看看fixopen(dup)和LiuDian(薛定谔的猫)的回答,在看懂别人说的话之前不要总以为别人没看懂你的话。
讨论这个问题先确定我们说的原子操作是不是一回事。
举个例子,信号量加锁,可能你是把锁住的代码段当作原子操作,而有些朋友认为“锁”这个动作是原子操作。我认为锁住的代码段不是原子操作。
原子操作是不能被中断的,如果被中断是很可能要出问题的,而不是你所说的“不会造成任何影响”。
用信号量锁起来的代码段不是原子操作,这个代码段当然是可以被中断,而且因为有锁,所以“不会造成任何影响”。
这里没有人把你所说的“中断”理解成“终止”。OK?
晨星
2006-04-10
打赏
举报
回复
“正在”进行原子操作?那肯定不在阻塞状态嘛。
如果一个线程正处在阻塞状态,那就不要讨论它是否正在进行原子操作了——它不可能“正在”进行任何操作。
asggg
2006-04-10
打赏
举报
回复
那就是不能被中断和能被中断之分而已,不管如何也没所谓了.
我说的中断,不是终止.OK?
fixopen
2006-04-10
打赏
举报
回复
首先,需要确定原子操作跟锁没有什么逻辑上的关系。
原子操作就是指不容被打断的操作。在硬件级别,一般通过某信号线保持{高|低}电平来维持不被打断性,或者用某些人喜欢的术语是总线锁定。有了硬件提供的原子操作机制,OS可以组合出来各种原子操作,最显著的就是各种同步机制中的基本装置——锁——对于它的操作一般是原子的,不容打断的。一般来说,系统地吞吐量跟原子操作的时限和频度密切相关。他们是一般是负相关的。所以,现在很多OS策略努力的目的都是尽可能的缩短原子操作的时限而不引入逻辑错误
LiuDian
2006-04-10
打赏
举报
回复
"长时间的原子操作也许不实际,但原子操作是否能被打断确实是个疑问而已."
被打断了那还叫原子操作了么?
原子操作要看在什么层面上。从程序角度来说cpu的指令都是原子执行的。但是从cpu内部看就不是这样。 数据库事物从对数据的操作上是原子的。但是从os角度看却不是。
你所说的线程的原子操作。至少我是没有听说过这个概念。线程一般是os的基本调度单位。在强占调度的os里 os随时可以中断线程,怎么会有所谓的原子操作。倒是os提供的很多api都是原子的。不过这个是os内核范畴的东西 和线程无关。我不知道你是不是把被mutex保护的代码段叫作
原子操作,代码层面上来看也可以算作是原子的。里面自然可以阻塞。而且不会有任何问题。
littlegang
2006-04-10
打赏
举报
回复
我觉得原子操作应当是指这个操作要么完成(成功或者失败的情况),要么撤销(恢复原装),
这个和互斥、锁没有必然联系,当然为了保证原子性,可能会用到互斥
另外操作系统执行原子操作也不是不可以被中断,这完全取决于操作系统的调度实现
超长的原子操作是不可容忍的,一定会在设计时被更合理的操作替代
asggg
2006-04-10
打赏
举报
回复
理论上是这样。只是这样一来,操作系统或虚拟机切线程时,还要检查一下将要上台的候选线程和将要下台线程是否有相同的锁,如果有,再换一个试试?
你这里说的锁不是可以指互斥锁吗?
长时间的原子操作也许不实际,但原子操作是否能被打断确实是个疑问而已.
晨星
2006-04-10
打赏
举报
回复
谁会在自己设计的操作系统中放耗时的原子操作,做软件产品也总得讲点质量和信誉吧。
加载更多回复(16)
C++系列第2:C++2.0(11+14+17+20)详解及多
线程
实战
通过lambda表达式创建
线程
101 thread
线程
的使用 101 互斥量与临界区 105 期物Future 111 条件变量 112
原子操作
114 内存模型 118 第7章 C++2.0
线程
池原理与实战 120
线程
与
线程
池的基本原理 120 1)、
线程
120 2)、...
C++多
线程
的
原子操作
、
线程
阻塞
原子操作
:不可被中断的一个或者一系列操作,这些操作要一次性执行完毕,或者一个都不执行。 多
线程
存在的问题 在多
线程
中,由于进程的多个
线程
都是共享该进程的所有资源,那么如果有多个
线程
访问同一个资源时,...
并发 · 四 ——
线程
状态 和 阻塞时中断的 interrupt()方法
1)新建:当
线程
被创建时,它只会短暂地
处于
这种状态,在这段时间内,主要会执行一些初始化的的操作。 2)就绪:在这种状态下,只要调度器把时间片分配给
线程
,该
线程
就可以运行了。 3)阻塞:
线程
能够运行,...
线程
阻塞的代价
在看多
线程
的时候,为了解决...那时候不明白
线程
阻塞挂起以及唤醒是如何消耗系统资源的,网上大多数是说
线程
的上下文切换和
线程
的调度消耗系统资源,还是讲的不够清楚,这几天一直在研究这个问题,今天写一下自己的...
Java多
线程
之
原子操作
类
本文目录: 文章目录CAS原理与问题CAS的操作过程...在并发编程中很容易出现并发安全问题,最简单的例子就是多
线程
更新变量i=1,多个
线程
执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Sy...
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章