怎么在主线程一直运行的情况下,也同时运行其它子线程啊。。。。。主线程不能sleep
涉及到多个共享资源问题。所以不能异步运行
这本身就是多线程的基本功能啊!
因为涉及到很多资源的问题,不能异步运行
在你创建一个线程后,这个线程就开始运行了,主线程并没有停。
比如MFC中,你的主线程在消息循环中不停的循环,而有一个子线程也有一个循环,不停的用来发送某个消息,那你的程序就在一直的收到消息,因为,这两个线程都在运行!
可能你不太理解,一个CPU,怎么运行两个线程呢?OK,先说说你的CPU只有一个核的情况下吧,CPU的计算速度很快,它来回的切换运行主线程与你的子线程,这就给你造成了一种错觉:两个线程在同时运行,其实,在同一时间点,单核的CPU只能运行某一个线程,之所以,多线程一起运行,就是它的速度很快,给你带来的这种错觉就是多线程并行运行!
再说说,多核CPU,假设你的CPU有两核,这个时候,主线程和子线程就可以各用一个核在同时运行,这个时候是真真正正的同时在运行着两个线程!
关于资源共享,设置一个信号量,或者互斥量,用来控制线程在同一时间点只能有一个线程使用这个资源,在一个线程使用互斥资源的时候,如果另一个线程此时并不使用此资源,那另一线程就是还在运行着,并没有停下,如果另一线程此时要也使用这个互斥资源,那另一线程此时只能处于等待状态了,比如两个线程都想使用打印机,而打印机在某一时间段只能给某一个线程去使用,明白?
CPU时间片的概念我理解。我不理解的是,像你说的,一般main是主线程,在main里再创建其它线程话,那如果要让这个分线程运行就需要让主线程暂时睡眠。我的问题就是怎么让主线程不睡眠而分线程依然运行?当然可以创建两个线程,把原来需要在主线程运行的东西移到分线程中。但是这两个线程会涉及到对公共资源的访问。
@阳光明媚Ryan: 公共资源的访问也不是洪水猛兽啊,Windows有这样的机制啊。
有点搞不懂你的意思,什么是同步?什么是异步?异步运行怎么不能操作共享资源了?
两个异步运行的线程对于共享资源的访问会出现并发的问题
在现在流行的OS中永远也做不到“主线程一直运行”,及时你创建的是单线程进程也无法保证OS不调度运行其他进程的线程。
对 除非对linux内核进行更改。或者不断的发中断请求。
难道你是在单片机上开发实时机控程序吗,否则在Windows和Linux上没有啥技术能保证一个用户态线程永远占用CPU, 这样做也没有意义。
奇怪的问题后面一定有一个奇怪的设计,不妨说说你想解决什么问题。