专栏首页秘籍酷Linux并发(多线程协作)

Linux并发(多线程协作)

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

拓展:

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

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

有这么几点:

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

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

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

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

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

本文分享自微信公众号 - 秘籍酷(mijiku040),作者:林世霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux基础(进/线程间的竞争)

    今天,继续来讨论哲学话题。什么是真正的公平?给你两个选择,第一:全部人排一样的队,吃一样放的饭,赚一样的钱。第二:人人都分三六九等,有人高高在上事事优先,有人人...

    用户2617681
  • Linux并发(多线程)

    进程实际上是一个线程组,因此一个多线程进程就是一个团队,里面的每一条线程都可以被单独调度,提高了程序执行的并发性。

    用户2617681
  • Linux并发(函数的可重入性)

    可重入函数是并发编程中必须要考虑的问题,否则代码就会有隐患,更糟糕的是这些隐患往往只能在特定场景下才能复现。

    用户2617681
  • 五种线程池的对比与使用

    通过源码可以看出底层调用的是ThreadPoolExecutor方法,传入一个同步的阻塞队列实现缓存。

    爱撸猫的杰
  • java 线程池简介

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    DencyCheng
  • Java多线程之细说线程池

    前言   在认识线程池之前,我们需要使用线程就去创建一个线程,但是我们会发现有一个问题:    如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就...

    用户1195962
  • 理解线程池,看这篇足够了。

    海仔
  • 【原创】Java并发编程系列33 | 深入理解线程池(上)

    并发编程必不可少的线程池,接下来分两篇文章介绍线程池,本文是第一篇。线程池将介绍如下内容:

    java进阶架构师
  • 线程池参数详解

    我们知道JUC提供了丰富的并发工具类,其中类似于组的结构叫做线程池。就是说我们可以将我们需要运行的线程加入到这个组内,然后通过启动线程池来执行加入到线程池的所有...

    写一点笔记
  • 【C++】勉强能看的线程池详解

    线程池这东西,用了几次还是不得其解,简直是:求之不得,寤寐思服。悠哉悠哉,辗转反侧。

    看、未来

扫码关注云+社区

领取腾讯云代金券