首先,总结一下进程,线程的概念:
进程:进程(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