多线程

来源:互联网 发布:淘宝童装店简介 编辑:程序博客网 时间:2024/06/05 16:13

程序,进程线程的区别:

程序:以文件的形式存储在磁盘上的,他是计算机指令的集合;

进程:一个正在运行的程序实例,是一个程序在其自身的地址空间中的一次执行活动;

进程使用系统中的内存,而程序不使用内存, 不能被系统调度, 也不能作为独立运行的单位,所以它不占用系统的内存;

进程是不活泼的。进程从来不执行任何东西,他只是线程的容器。若要使进程完成某项操作,它必须拥有一个在他的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。

单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码;

每个进程至少有一个线程,来执行进程的地址空间中的代码,当创建一个线程是,操作系统会自动创建这个进程中的第一个线程,称为主线程,如main函数,WinMain函数,然后该线程可以创建其他线程;

线程:因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程;多

多线程例子:

#include <iostream>#include <windows.h>using namespace std;int i = 1000;DWORD WINAPI fun1(LPVOID lpParameter);DWORD WINAPI fun2(LPVOID lpParameter);HANDLE hMutex;int main(){HANDLE Thread1;HANDLE Thread2;Thread1 = CreateThread(NULL, 0, fun1, NULL, 0, 0);Thread2 = CreateThread(NULL, 0, fun2, NULL, 0, 0);CloseHandle(Thread1);CloseHandle(Thread2);hMutex = CreateMutex(NULL, FALSE, NULL);//创建互斥对象while (i>0){WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;cout << "主线程" << i << endl;i--;ReleaseMutex(hMutex);//释放互斥对象}return 0;}DWORD WINAPI fun1(LPVOID lpParameter){while (i>0){//INFINITE为一直等待,WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;cout <<"fun1线程"<< i << endl;i--;ReleaseMutex(hMutex);//释放互斥对象}return 0;}DWORD WINAPI fun2(LPVOID lpParameter){while (i>0){WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;cout << "fun2线程" << i << endl;i--;ReleaseMutex(hMutex);//释放互斥对象}return 0;}


引入互斥对象

CreateMutex(NULL, FALSE, NULL);
是为了让线程同步