C++线程相关初探,线程池的编写

首先,总结一下进程,线程的概念:

        进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

个人理解是,一个应用执行起来就是一个进程。举一个最简单的例子,咱们要玩游戏,点桌面的快捷方式,会执行一个exe文件,然后系统会分配内存和相应的资源供他执行,这就启动了一个进程。打开任务管理器,会更加的直接具体,上面清晰的写了两个大字进程。(个人理解,若有出入请指教)

        线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。

线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是CPU可执行调度的最小单位。也就是说,进程本身并不能获取CPU时间,只有它的线程才可以。

引入线程之后,将传统进程的两个基本属性分开了,**线程作为调度和分配的基本单位,进程作为独立分配资源的单位。**我对这句话的理解是:线程参与操作系统的调度,参与CPU的竞争,得到分配的时间片,获得处理机(CPU)运行。而进程负责获取操作系统分配的资源,如内存。

线程基本上不拥有资源,只拥有一点运行中必不可少的资源,它可与同属一个进程的其他线程共享进程所拥有的全部资源。

线程具有许多传统进程所具有的特性,故称为“轻量型进程”。同一个进程中的多个线程可以并发执行。

然后,就是多进程,多线程了:

        多进程:多进程就是多个进程一起执行,比如说我边听歌边打游戏,就是一种多进程。

        多线程:多线程即一个进程中有多个线程,因为有的操作非常的费时间,多开一条线程来执行比较好,比如说数据库的读写操作。

这些是一些基本概念,还有更多比如并发,并行等就不在这阐述了。

本人是未毕业的计科学生,正在一家嵌入式公司实习,本来是主攻java,招聘的时候也只谈java,但是进入以后还是得从头学c++,此片文章用来记录我的学习。

        首先,java对在多线程的支持可谓相当给力,用已经写好的类操作就行了,但是c++却不同,需要你更深入的了解线程的本质,而且涉及到堆栈,内存。这对c++的新手简直是噩梦。

        公司这边的任务是:写一个threadpool,来做成一个lib,供一些demo或者以后的项目使用。        

        在网上到处寻找,拼拼凑凑,写了一个简单的threadpool。

        首先c++对线程的操作要引入pthread的头文件,其中包括线程的创建,销毁,锁相关的方法。

       

int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*) ,void *arg);
 
//第一个参数为指向线程标识符的指针。
//第二个参数用来设置线程属性。
//第三个参数是线程运行函数的起始地址。
//第四个参数是运行函数的参数。
//pthread_create() 在调用成功完成之后返回零。其他任何返回值都表示出现了错误。

        因为使用线程池的目的是为了消除反复创建线程和销毁线程的时间。线程是用来执行任务的,所以要添加任务(addTask), 还要存放Task(Buffer)。

        多线程中,锁(mutex)和条件变量是最关键的。mutex用来锁住多线程会使用的共同资源。比如说2个线程用来取钱,共同资源是钱。如果不加锁会造成资源发生不正常改变。

        才疏学浅,希望大家指教!

转载:基于Linux/C++简单线程池的实现 - 糖炒栗子Sugar - 博客园

pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析_chengonghao的博客-CSDN博客_pthread_cond_t

Linux线程同步之条件变量pthread_cond_t - ZHX_1Q89 - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值