社区
进程/线程/DLL
帖子详情
线程同步时的进入是否是先进先出的?
clane
2003-10-29 04:15:13
恩,如果有一组线程在等待进入一个临界区,那进入顺序时候是先等待的先进入?还是乱序的?
哪位指点一下,我需要确切的答案.不要好像之类的.:) 因为我自己记得好像是保证FIFO的.
...全文
146
15
打赏
收藏
线程同步时的进入是否是先进先出的?
恩,如果有一组线程在等待进入一个临界区,那进入顺序时候是先等待的先进入?还是乱序的? 哪位指点一下,我需要确切的答案.不要好像之类的.:) 因为我自己记得好像是保证FIFO的.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oygy
2003-10-30
打赏
举报
回复
<<WINDOWS核心编程>>里曾阐述过线程的调度并无顺序可言,完全是操作系统的职责,而且微软对其调
度算法也是含糊其词的,所以这个优先级次序不能由我们程序员可以左右.
beyondtkl
2003-10-30
打赏
举报
回复
同意楼上.
应该多看看操作系统的进程调度
clane
2003-10-30
打赏
举报
回复
分少了一点。不好意思。呵呵
clane
2003-10-30
打赏
举报
回复
呵呵,感谢aachenG回复了我这么多。:)
不过对于不是用完成端口实现的IO模型,一般不会有多个线程处理一个IO的问题。。。假设有几千个客户端连着你不停的发包,这种排序的代价。。。我还不如直接用多线程一个IO一个线程的效率高多了。
可惜没有这方面的完善代码可以参考啊。
结帖了。
aachenG
2003-10-30
打赏
举报
回复
誰先讀,誰後讀,也會"超级恐怖"? 看來你程序中需要進行同步互斥的地方不是這裡吧?
"性能要求非常高,不能自己弄個對列去排序"? 操作系統為CPU調度線程還要分優先級排序呢.要達到你的目的,還是必須自己去排序,調度,沒有現成的MFC可以用.
clane
2003-10-30
打赏
举报
回复
不,不,不是这样的。我里面也有读写问题处理,但我的问题就是存在多个读的时候,要保证先读的先进入。。。我看过一些server的源代码,好像都没有对这个问题作过处理阿。。。
aachenG
2003-10-30
打赏
举报
回复
具體問題具體解決,這個要用同步去處理.建議你去看看每本操作系統教程都有的讀寫文件時,寫優先還是讀優先的公平問題.你的情況好像和寫優先的處理差不多.
clane
2003-10-30
打赏
举报
回复
那这样的话,对于数据的等待处理岂不是超级麻烦?
例如
A,B,C三个数据先后到达,处理A的时候,B和C在外面等待。对于一个对性能要求非常高的程序,
又不能自己弄个队列去排序。。
那就是说有可能先处理到C再处理B了?
岂不是超级恐怖?
各位的程序里面怎么解决的阿?
vcforever
2003-10-29
打赏
举报
回复
我认为不是先进先出的,因为线程的调度是由操作系统来完成的,我们无权决定下一个时刻哪个线程应该进入临界区或可以访问共享资源,只有操作系统才能根据到底是哪个进程或哪个线程迫切的需要CPU,进而把CPU时间分配给他!所以我认为线程的同步是无序的!
aachenG
2003-10-29
打赏
举报
回复
是否真的是谁先等待谁先进来,不是我们所应该利用的。因为这是分属同步与互斥的两个不同概念,而我们有另外的方法去实现同步。
保证某一时刻只有一个线程访问一个资源,这是互斥,是临界区的责任;
保证一段代码比另一段代码先执行,这是同步,可以用CEvent,SendMessage等去实现。
再说,你的多个线程并发运行,谁先等待临界区,是你能预见的吗?如果你真的能预见,并且还在代码中利用上了,那么你应该对它们进行同步而不是互斥。
topwork
2003-10-29
打赏
举报
回复
楼上的说的不错,却是不存在“等待队列”或者类似的概念,但是如果你编写一个程序试试,最后形成的结果就是谁先等待谁先进来,有很大的概率都是这种情况,我的帖子说“绝对是”是不对的。
flyelf
2003-10-29
打赏
举报
回复
gz
aachenG
2003-10-29
打赏
举报
回复
臨界區不是先等待的先進入的,絕對.如果大家都在等待,那麼CPU先調用誰,誰就可以先進入.
臨界區只是一個"保證某一時刻只有一個線程訪問一個資源"的概念,如果哪個類有甚麼附加功能的話,MSDN會告訴你的,不要想得太複雜了.
要事先等待先進入,就要靠你的程序邏輯去支持了.
lop5712
2003-10-29
打赏
举报
回复
乱序的,我在下面的帖子中给出过解释
http://expert.csdn.net/Expert/topic/2340/2340182.xml?temp=.871792
topwork
2003-10-29
打赏
举报
回复
利用临界区进行线程互斥肯定是先进现出的,如果想控制进出的顺序请不要用临界区,考虑其他内核对象。
JAVA多线程精讲下
线程的同步(线程安全问题)l 线程的死锁l 线程间通信l 线程组l 线程池l 多线程的第三种实现方案l 匿名内部类方式使用多线程l 定
时
器的使用l 多线程面试题
线程的同步方式
线程同步
:即当有一个线程在对内存进行操作
时
,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。 二、为什么需要同步 线程有自己的...
python队列--
先进先出
和先进后出
什么是
先进先出
: 简单来说就是先进来的就先出去,可以实现多线程中直接使用,可以使用列表来实现线程间的同步 什么是先进后出? 就像叠衣服一样,最后一件叠好的衣服... #
先进先出
取值,按
进入
顺序排列取值 for i
Android中的线程(二)线程安全 &
线程同步
线程安全又叫
线程同步
,在Java中多个线程同
时
访问一个可共享的资源变量
时
,有可能会导致数据不准确,导致使用该变量的逻辑出现问题,因此使用同步锁来保证一个线程对该资源的操作完成之前,其他线程不会对其进行操作...
java多
线程同步
5种方法
二、为什么要
线程同步
因为当我们有多个线程要同
时
访问一个变量或对象
时
,如果这些线程中既有读又有写操作
时
,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账户同
时
被两个线程操作...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章