12.线程

程序,进程,线程三者的定义:
程序
:只是一组指令的有序集合;
进程:
是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行
资源分配和调度的一个独立单位;
线程:
是进程的一个实体,
CPU
调度和分派的基本单位
,
它是比进程更小的能独立运
行的基本单位
.
线程自己基本上不拥有系统资源
,
只拥有一点在运行中必不可少的资源
(
如程
序计数器
,
一组寄存器和栈
),
一个线程可以创建和撤销另一个线程;

进程与线程区别与联系
划分尺度:
线程更小,所以多线程程序并发性更高;
资源分配:
进程是资源分配的基本单位,同一进程内多个线程共享其资源;
地址空间:
进程拥有独立的地址空间,同一进程内多个线程共享其资源;
处理器调度:
线程是处理器调度的基本单位;
执行:
每个线程都有一个程序运行的入口,顺序执行序列和程序的出口,但线
程不能单独执行,必须组成进程,一个进程至少有一个主线程。简而言之
一个程序至少有
一个进程
,
一个进程至少有一个线程

进程和程序区别和联系

1)程序只是一组指令的有序集合,
它本身没有任何运行的含义,
它只是一个静态的实
体。而进程则不同,
它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的
生命周期。反映了一个程序在一定的数据集上运行的全部动态过程。
2)进程和程序并不是一一对应的,
一个程序执行在不同的数据集上就成为不同的进程,
可以用进程控制块来唯一地标识每个进程。
而这一点正是程序无法做到的,
由于程序没有和
数据产生直接的联系,
既使是执行不同的数据的程序,
他们的指令的集合依然是一样的,
以无法唯一地标识出这些运行于不同数据集上的程序。
一般来说,
一个进程肯定有一个与之
对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程
(
因为它没有执行
),
有可能有多个进程与之对应
(
运行在几个不同的数据集上
)
3)
进程还具有并发性和交往性,
这也与程序的封闭性不同。
进程和线程都是由操作系统
所体会的程序运行的基本单元,
系统利用该基本单元实现系统对应用的并发性。
线程:拥有时间片的函数,包含于进程,共享进程资源(数据区,工作路径,信号,文件描述符)
线程私有资源:线程ID,栈,PC,
线程的创建:
int pthread_create(pthread_t *thread,属性,函数指针,函数形参):创建线程
void pthread_exit(void *retval);退出线程
pthread_join(线程ID,NULL):若没线程结束则阻塞
线程的同步: 根据制约关系按照一定的顺序先后执行
int sem_init(sem_t *sem,0,unsigned int value):初始化信号量 sem:信号量对象 value:信号量初始化值
int sem_wait(sem_t *sem):获取信号量,不成功则阻塞(P操作)
int sem_post(sem_t *sem):释放信号量  (V操作)
线程的互斥:保证数据的完整性,可以用条件变量实现同步
int pthread_mutex_init(pthread_mutex_t *mutex,NULL):创建互斥锁
int pthread_mutex_lock(pthread_mutex_t *mutex):加锁
int pthread_mutex_unlock(pthread_mutex_t *mutex):解锁

猜你喜欢

转载自blog.csdn.net/qq_33575901/article/details/80978207