Linux并发(多线程协作)

一个程序里的线程数,就像一家公司里的员工数一样,太少了忙不过来,太多了入不敷出。因此我们需要有更好的机制来协调它们。

拓展:

最理想的情况是:让进程有一些初始数目的线程(所谓的线程池),当没有任务的时候这些线程自动进入睡眠,有了任务他们会立即执行任务,不断循环。进程还应该可以根据自身任务的繁重与否来增删线程的数目,当所有的任务都完成了之后,所有的线程还能妥当地收官走人,不带走一片云彩。

下图是一个处于初始状态的线程池:

有这么几点:

1,任务队列中刚开始没有任何任务,是一个具有头结点的空链队列。

2,使用互斥锁来保护这个队列。

3,使用条件变量来代表任务队列中的任务个数的变化——将来如果主线程往队列中投放任务,那么可以通过条件变量来唤醒那些睡着了的线程。

4,通过一个公共开关——shutdown,来控制线程退出,进而销毁整个线程池。

你如果有更好的idea,可以扩展该设计,但就目前而言,一个相互协作的多线程组织已经初具雏形。

原文发布于微信公众号 - 秘籍酷(mijiku040)

原文发表时间:2019-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券