main线程的深刻理解:多线程的平等
我曾经有段时间研究MFC技术,这是一门很古老的技术了。当时,我在用C/C++做问答系统,为了更好的实现windows操作系统的界面,查阅了大量的windows技术,其中就有MFC技术。在MFC里面提到了“入口”这个概念,从一个新的角度描述了main线程或者main函数,令我思路大开,所以写出这篇文章。
多线程讲究的是平等,因平等而变多,因变多而威力无比。但是,很多时候我们误解了平等,人为造成了不平等。冒出个main,顾名思义“主要的、重要的”,既然把线程划分为三六九等,还有什么平等可言呢。所以,我觉得,将main视为entry才是最合适的。
我有一个观点:main不是上帝,它只是普罗大众的一员。main更应该叫做entry入口,正因为叫main才导致我们束缚了手脚。如果没有main字面意思的误导,我们就能深刻认识它只是入口的作用,可以启动无数个线程,这些线程都能与main线程平起平坐。
main线程只是一个普通的线程,在main线程里面,如果启动的其他的线程t,那么main线程和t线程将会轮流在CPU上运行,并不会因为线程是main线程而给以更高的优先级。main线程和t线程是完全独立的,即便是main线程执行过程中出现问题,抛出异常发生了中断,但是t线程也不会受到影响的。
很多人不会多线程,但是却会写main函数(main线程)。如果抛开对main线程的误解,把它当做多线程中的普通一员,则会思路打开:把main线程的代码复制一份,新生成一个main2函数,岂不是又新增了一个线程,以此类推,我们可以生成3个,5个,...,甚至更多“类main函数”,这便意味着多线程的使用。
其实,多线程的使用并没有那么难,不要对它害怕。我们已经在不经意间实现了main线程,那么一定可以实现更多的线程。