C++多线程介绍
线程控制块
线程的实体包括程序、数据和线程控制块TCB,TCB包括:
- 线程状态
- 当线程不运行时,被保存的线程资源
- 一组执行堆栈
- 存放每个线程的局部变量主存区
- 访问同一进城中的主存和其他资源




常用API
C语言
头文件#include<Windows.h>
CreateThread





1 |
|
GetCurrentThreadId
DWORD WINAPI GetCurrentThreadId();//得到当前线程ID
CloseHandle

SuspendThread

ResumeThread

Sleep

1 |
|
WaitForSingleObject


未通知状态:线程的句柄所关联的线程还未结束
1 |
|
ExitThread


TerminateThread


GetExitCodeThread


1 |
|
WaitForMultipleObjects



1 |
|
C++ 语言



#include <process.h>
_beginthread



_endthread


1 |
|
多线程的同步和互斥
异步:各跑各的
同步:接力赛,接棒才可继续
互斥:独木桥,每次只能通过一个人


临界区

类似于电话亭,只能每次进去一个人






1 |
|
线程死锁



信号量




1 |
|


互斥量




1 |
|
事件






1 |
|
互斥量和事件都可以像信号量一样实现程序只能打开一例
PV操作





1 |
|
线程总结
信号量、互斥、事件都是内核对象,所有都可以使用WaitForSingleObject和CloseHandle

本地存储TLS



1 |
|





1 | //三个线程互不影响,自己打印自己的值 |
多线程间消息通讯









1 |
|
C++11 多线程






thread 线程类








1 |
|
this_thread命名空间







1 |
|
atomic 类与 atomic_flag类





1 |
|

1 |
|
互斥类mutex




1 |
|

1 | //递归加锁就是多次加锁,也要多次解锁 |



1 | timed_mutex m;//指定锁住时间 |

lock_guard类





1 |
|

unique_lock类






1 |
|
conditon_variable类











1 |
|
future类







1 |
|
promise类





1 |
|

1 |
|
packaged_task类




1 |
|
总结




1 |
|
总结
1 |
|
@[toc]

