首页 新闻 会员 周边 捐助

c++主线程子线程同时运行

0
悬赏园豆:50 [已关闭问题] 关闭于 2011-12-15 19:35

怎么在主线程一直运行的情况下,也同时运行其它子线程啊。。。。。主线程不能sleep

问题补充:

涉及到多个共享资源问题。所以不能异步运行

会飞的机器猫的主页 会飞的机器猫 | 初学一级 | 园豆:86
提问于:2011-12-14 16:49
< >
分享
所有回答(5)
0

这本身就是多线程的基本功能啊!

56180825 | 园豆:1748 (小虾三级) | 2011-12-14 19:51

因为涉及到很多资源的问题,不能异步运行

支持(0) 反对(0) 会飞的机器猫 | 园豆:86 (初学一级) | 2011-12-14 21:31
0

在你创建一个线程后,这个线程就开始运行了,主线程并没有停。
比如MFC中,你的主线程在消息循环中不停的循环,而有一个子线程也有一个循环,不停的用来发送某个消息,那你的程序就在一直的收到消息,因为,这两个线程都在运行!
可能你不太理解,一个CPU,怎么运行两个线程呢?OK,先说说你的CPU只有一个核的情况下吧,CPU的计算速度很快,它来回的切换运行主线程与你的子线程,这就给你造成了一种错觉:两个线程在同时运行,其实,在同一时间点,单核的CPU只能运行某一个线程,之所以,多线程一起运行,就是它的速度很快,给你带来的这种错觉就是多线程并行运行!
再说说,多核CPU,假设你的CPU有两核,这个时候,主线程和子线程就可以各用一个核在同时运行,这个时候是真真正正的同时在运行着两个线程!
关于资源共享,设置一个信号量,或者互斥量,用来控制线程在同一时间点只能有一个线程使用这个资源,在一个线程使用互斥资源的时候,如果另一个线程此时并不使用此资源,那另一线程就是还在运行着,并没有停下,如果另一线程此时要也使用这个互斥资源,那另一线程此时只能处于等待状态了,比如两个线程都想使用打印机,而打印机在某一时间段只能给某一个线程去使用,明白?

莫压枯枯地 | 园豆:220 (菜鸟二级) | 2011-12-15 09:15

CPU时间片的概念我理解。我不理解的是,像你说的,一般main是主线程,在main里再创建其它线程话,那如果要让这个分线程运行就需要让主线程暂时睡眠。我的问题就是怎么让主线程不睡眠而分线程依然运行?当然可以创建两个线程,把原来需要在主线程运行的东西移到分线程中。但是这两个线程会涉及到对公共资源的访问。

支持(0) 反对(0) 会飞的机器猫 | 园豆:86 (初学一级) | 2011-12-15 13:35

@阳光明媚Ryan: 公共资源的访问也不是洪水猛兽啊,Windows有这样的机制啊。

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2011-12-15 14:27
0

有点搞不懂你的意思,什么是同步?什么是异步?异步运行怎么不能操作共享资源了?

ChatinCode | 园豆:2272 (老鸟四级) | 2011-12-15 09:19

两个异步运行的线程对于共享资源的访问会出现并发的问题

支持(0) 反对(0) 会飞的机器猫 | 园豆:86 (初学一级) | 2011-12-15 13:36
0

在现在流行的OS中永远也做不到“主线程一直运行”,及时你创建的是单线程进程也无法保证OS不调度运行其他进程的线程。

胡屯 | 园豆:714 (小虾三级) | 2011-12-15 09:23

对 除非对linux内核进行更改。或者不断的发中断请求。

支持(0) 反对(0) 会飞的机器猫 | 园豆:86 (初学一级) | 2011-12-15 13:37
0

难道你是在单片机上开发实时机控程序吗,否则在Windows和Linux上没有啥技术能保证一个用户态线程永远占用CPU, 这样做也没有意义。

奇怪的问题后面一定有一个奇怪的设计,不妨说说你想解决什么问题。

嗷嗷 | 园豆:757 (小虾三级) | 2011-12-15 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册