一个程序里的线程数,就像一家公司里的员工数一样,太少了忙不过来,太多了入不敷出。因此我们需要有更好的机制来协调它们。
拓展:
最理想的情况是:让进程有一些初始数目的线程(所谓的线程池),当没有任务的时候这些线程自动进入睡眠,有了任务他们会立即执行任务,不断循环。进程还应该可以根据自身任务的繁重与否来增删线程的数目,当所有的任务都完成了之后,所有的线程还能妥当地收官走人,不带走一片云彩。
下图是一个处于初始状态的线程池:
有这么几点:
1,任务队列中刚开始没有任何任务,是一个具有头结点的空链队列。
2,使用互斥锁来保护这个队列。
3,使用条件变量来代表任务队列中的任务个数的变化——将来如果主线程往队列中投放任务,那么可以通过条件变量来唤醒那些睡着了的线程。
4,通过一个公共开关——shutdown,来控制线程退出,进而销毁整个线程池。
你如果有更好的idea,可以扩展该设计,但就目前而言,一个相互协作的多线程组织已经初具雏形。