多线程编程与线程同步
来源:互联网 发布:vs java 编辑:程序博客网 时间:2024/05/19 03:42
进程与线程
进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
线程函数
HANDLE CreateThread();
CloseHandle(hThread);
线程的同步
- 临界区(CCriticalSection)
- 事件(CEvent)
- 互斥量(CMutex)
- 信号量(CSemaphore)
l 临界区: CRITICAL_SECTION,最容易使用
适用范围: 单一进程的各线程之间用来排它性占有特性: 局部性对象; 快速而有效.
函数: EnterCriticalSection LeaveCriticalSection
l 事件Event:
适用范围: 同来控制对象信号的接收,常与信号系统结合起来特性:
核心对象函数: CreateEvent OpenEvent PulseEvent SetEvent ResetEvent
l 互斥Mutex:
适用范围: 不同线程之间用来排它性占有特性: 核心对象(跨进程), 可以使用wait进行等待,只能被拥有线程所释放。
互斥对象与临界区对象很像.互斥对象与临界区对象的不同在于:互斥对象可以在进程间使用,而临界区对象只能在同一进程的各线程间使用。当然,互斥对象也可以用于同一进程的各个线程间,但是在这种情况下,使用临界区会更节省系统资源,更有效率。
函数:CreateMutex ReleaseMutex
l 信号量semaphore:
适用范围: 用来限制资源占用特性: 核心对象,没有拥有者,任何线程都可释放
函数:CreateSemaphore OpenSemaphore ReleaseSemaphore
- 多线程编程与线程同步
- 多线程编程:线程同步
- 【多线程】多线程编程:线程同步
- 多线程与线程同步
- 多线程编程5 线程同步
- Win32多线程编程(3) — 线程同步与通信
- Win32多线程编程 — 线程同步与通信
- Win32多线程编程(3) — 线程同步与通信
- Win32多线程编程 — 线程同步与通信
- 多线程编程——线程同步与异步
- 多线程编程—线程的同步与互斥
- 多线程编程 线程互斥 线程同步
- Java线程同步与多线程
- Java多线程与线程同步
- python多线程与线程同步
- 多线程与线程同步问题
- java多线程与线程同步
- 多线程同步与线程通信
- CListCtrl用法简介
- 向android中增加自定义的Linux内核启动参数
- deb包转rpm包
- excel斜线分隔
- 服务器架构改进1
- 多线程编程与线程同步
- C#+“外部表”实现Oracle数据快速插入
- script.filesystemobject
- 将Asp.Net下的Mvc1升级到Mvc2简单方法
- 谷歌pr对于seo参考价值越来越小了
- 公告:新版CSDN博客专家申请规则及分类调整
- Apache 服务器介绍(摘录)
- 郁闷
- JavaScript语言精粹 标示符( example:变量未定义判断)