社区
进程/线程/DLL
帖子详情
线程数量的问题
tiananmen
2006-12-27 07:39:58
我一下创建了500个线程,每个线程运行完就结束,
但是,我只想保持其中的10个同时运行,
10个中的某个线程结束后再运行其它的线程,
但是正在运行的总量要一直保持在10个,
直到这500个线程都运行完毕,
不知道我说清楚了没有,
我该如何来进行控制?
感觉应该是个古老的问题,但是手边没有书,
只好先到这里问问,最好能有简单的代码。
...全文
422
20
打赏
收藏
线程数量的问题
我一下创建了500个线程,每个线程运行完就结束, 但是,我只想保持其中的10个同时运行, 10个中的某个线程结束后再运行其它的线程, 但是正在运行的总量要一直保持在10个, 直到这500个线程都运行完毕, 不知道我说清楚了没有, 我该如何来进行控制? 感觉应该是个古老的问题,但是手边没有书, 只好先到这里问问,最好能有简单的代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tiananmen
2007-01-06
打赏
举报
回复
谢谢大家,搞定了,
用的是 Semaphore,标志成10个就OK了。
结贴
zdleek
2007-01-05
打赏
举报
回复
上面已经有很多方法,楼主随意挑一个方案就可达到自己的目的
MLiang
2007-01-05
打赏
举报
回复
Semaphore
Analyst
2007-01-04
打赏
举报
回复
开个线程池,设定最大线程数为10,然后往里面添加500个任务即可。
microyzy
2007-01-04
打赏
举报
回复
这个问题干吗要自己调度?不太明白,mark一下
个人认为其实是个资源抢占的问题,创建一个值为10的信号灯,最初抢到信号灯的10个线程先运行,没有抢到的等待信号灯,抢到的运行结束后释放,其他的由系统调度就行
会思考的草
2006-12-30
打赏
举报
回复
如果要自己调度自己创建的线程的话,就只能用fiber了。
会思考的草
2006-12-30
打赏
举报
回复
Fiber当然可以在windows下用了,不过好像只能在2k以上系统中?记不清楚了。
Fiber其实就是用户级线程,其调度归用户管理,kernel不知道这些线程的存在及其数量。Windows中的Thread其实是Kernel level thread,其调度由kernel管理。
thread可以转换成fiber,很容易的。
blastzgd
2006-12-30
打赏
举报
回复
找到答案:
Widnows 是提供了用户级线程的,类似 coroutine 需要用户主动是切换。这在单线程程序中非常有用。线程调度模块只负责提供堆栈,环境的保存。不负责分配时间片等。
自己实现 coroutine 并不难,但能用操作系统提供的可以得到更多的便利。Windows 中把这种用户级线程叫做 Fiber,纤维的意思。比较通用的译名是纤程。
我们可以把一个 thread 转换成一个 fiber ,用到的 API 是 ConvertThreadToFiber。其实用的更多的是CreateFiber,它可以创建一个纤程,但并不切换过去运行。
被创建出来的 Fiber 会有一个上下文的地址被返回,用于以后的切换操作。我们可以用 SwitchToFiber 来切换。这是唯一用于 Fiber 释放操作权的途径。SwitchToFiber 必须显式的指定切换的目标,所以 Fiber 调度的工作需要我们自己写代码来实现。
但是,SwitchToFiber的调用者也必须是纤程,也就是说必须在创建的纤程内使用这个函数,好像光是使用纤程也不能对楼主所提的问题有所帮助吧.还是一样要用到其它的同步办法.
blastzgd
2006-12-30
打赏
举报
回复
没用过,所以问下,高手请回答.
blastzgd
2006-12-30
打赏
举报
回复
楼上,Fiber能在Windows下用么?
会思考的草
2006-12-29
打赏
举报
回复
用Fiber吧。
trueadou
2006-12-29
打赏
举报
回复
使用CSemaphore是个不错的主意!
鄢老
2006-12-29
打赏
举报
回复
我的想法是,先要一个管理线程序,然后再设置一个互锁函数,来标志其标量的以后十个线程在运行,而在管理线程中要不断检查这10个线程是否运行完毕,运行完之后标志加10,再运行下10个线程。等标志加到499的时候,你根据实际情况另行处理。
dirdirdir3
2006-12-28
打赏
举报
回复
使用CSemaphore来控制同时运行的数量
南风1
2006-12-28
打赏
举报
回复
同意楼上的
另外设置一个计数器,到500时停止创建。
surnde
2006-12-28
打赏
举报
回复
第一次开10个线程,然后在线程结束时再创建一个新线程
这样就保持了10个线程。
blastzgd
2006-12-28
打赏
举报
回复
dirdirdir3(风) ( ) 信誉:100 Blog 2006-12-28 11:33:29 得分: 0
使用CSemaphore来控制同时运行的数量
tiananmen
2006-12-27
打赏
举报
回复
没明白你的意思
ProgrameMan
2006-12-27
打赏
举报
回复
使用两个不同的线程函数不就可以了吗
JAVA多
线程
精讲下
线程
的同步(
线程
安全
问题
)l
线程
的死锁l
线程
间通信l
线程
组l
线程
池l 多
线程
的第三种实现方案l 匿名内部类方式使用多
线程
l 定时器的使用l 多
线程
面试题
建议78:应避免
线程
数量
过多
建议78:应避免
线程
数量
过多 在多数情况下,创建过多的
线程
意味着应用程序的架构设计可能存在着缺陷。经常有人会问,一个应用程序中到底含有多少
线程
才是合理的。现在我们找一台PC机,打开Windows的任务管理器,看...
线程
池如何确定
线程
数量
在高并发的情况下采用...那么在高并发的情况下,我们怎么选择最优的
线程
数量
呢?选择原则又是什么呢?这个
问题
去哪网的技术总监问过我,这里总结一下。 如果是CPU密集型应用,则
线程
池大小设置为N+1; 对于计算...
一招教你控制python多
线程
的
线程
数量
现在希望控制
线程
数量
:例如每次只下载5张,当下载完成后再下载另外5张,直至全部完成 查了一些资料,发现在python中,threading 模块有提供 Semaphore类 和 BoundedSemaphore类来限制
线程
数 官网给出例子如下: ...
python flask多
线程
线程
数量
异常
项目场景: 在flask中使用threading模块,进行多
线程
代码调用
问题
描述: flask运行后
线程
数目会比预期的
数量
多一个未知的
线程
import threading import time from flask import Flask ... print("
线程
数量
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章