一.简介
在Windows环境下,只有用WinSDK的API函数才能实现,C和C++的库没有支持,但是好像听说C++11以上的版本好像有支持,待我有空去了解
二.并发和并行
1.并行
并行就是同时执行,类似多个CPU同时工作
int a; int b; int c; void F1() { b = a * 2; a = b; } void F2() { c = a + 1; a = c; } main() { a = 5; //Start F1,F2 in parallel F1(); F2(); printf("a=%d ", a); //a=11 或者a=6 或者a=12 }
2.并发
并发体现为某一个时刻只能处理一个操作,但是它是有次重点的,类似人脑
多线程就是并发的机制,谁先抢到CPU谁先运行
三.WinSDK
1.WinSDK实现多进程
CreateProcess(
LPCSTR lpApplicationName, //进程名
LPSTR lpCommandLine, //命令行参数
LPSECURITY_ATTRIBUTES lpProcessAttributes, //进程安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性
BOOL bInheritHandles, //安全属性是否继承
DWORD dwCreationFlags, //创建标识符
LPVOID lpEnvironment, //指定进程所使用的环境变量区,LPCSTR lpCurrentDirectory, //设定子进程的工作目录与工作磁盘
LPSTARTUPINFO lpStartupInfo, //开始信息结构体
LPPROCESS_INFORMATION lpProcessInfomation //进程信息结构体
);
- lpCommandLine
搜索可执行文件的顺序:
1.调用者的可执行文件所在目录
2.调用者的目前工作目录
3.Windows目录
4.Windows System目录
5.环境变量中的path所设定的各目录
- dwCreationFlags
CREATE_SUSPENDED表示子进程产生后,父进程立刻暂停执行
- lpEnvironment
NULL表示子进程跟父进程一致
- lpCurrentDirectory
.NULL表示子进程跟父进程一致
- lpProcessInfomation
typedef struct _PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
2.WinSDK实现多线程
CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程的安全属性
DWORD dwStackSize, //堆栈的大小
LPTHREAD_START_ROUTINE lpStartAddress, //执行线程函数名LPVOID lpParameter, //函数的参数
DWORD dwCreationFlags, //创建标志LPDWORD lpThreadId //线程ID
);
- dwCreationFlags
0表示执行线程立刻开始执行
CREATE_SUSPENDED表示要求执行线程暂停执行
四.C++库文件
C++11标准在标准库中为多线程提供了组件,使用C++编写与平台无关的多线程程序成为可能
C++11新标准引进了:<thread> <atomic> <mutex> <future> <condition_variable>