进程、线程
- 进程vs. 线程
线程的划分尺度小于进程,使得多线程程序的并发性高。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1.1定义方面:进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径。
1.2角色方面:在支持线程机制的系统中,进程是系统资源分配的单位,线程是系统调度的单位。
1.3资源共享方面:进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器。
1.4独立性方面:进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在。
2. windows 线程、进程同步
2.1临界区
EnterCriticalSection/LeaveCriticalSection只能是线程
2.2 事件
CreateEvent/OpenEvent/SetEvent/ResetEvent/PulseEvent可以用于进程
2.3 信号量
CreateSemaphore/ReleaseSemaphore/OpenSemaphore可以用于进程
2.4 互斥量
CreateMute/OpenMutex/ReleaseMutex可以用于进程
3. Unix线程、进程同步
3.1 互斥锁
pthread_mutex_init/pthread_mutex_lock/pthread_mutex_destroy/phread_mutex_unlock
3.2 条件变量
pthread_cond_init/pthread_cond_wait/pthread_cond_timewait/pthread_cond_destroy/
pthread_cond_signal/pthread_cond_broadcast
3.3 信号量
sem_init/sem_wait/sem_post/sem_destroy
3.4 文件加锁/记录锁
4. 进程间通信