/*
多线程入门参考:https://blog.csdn.net/a3192048/article/details/82152618
*/
多线程编程实例1:
一个子线程 + 主线程 + 互斥锁:
#include <windows.h>
#include <iostream>
using namespace std;
HANDLE hMutex = NULL;//互斥量
//子线程1
DWORD WINAPI Fun1(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++) {
WaitForSingleObject(hMutex, INFINITE);//请求一个互斥量锁
cout << i << " : Fun A Thread Fun Display!" << endl; //有的时候程序没有输出换行
Sleep(100);
ReleaseMutex(hMutex);//释放互斥量锁,hMutex为释放的互斥量句柄
}
return 0L;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, Fun1, NULL, 0, NULL);//创建线程
hMutex = CreateMutex(NULL, FALSE, L"screen");//创建互斥体 第三个参数是Mutex的名称:还可以写成 TEXT("screen")
CloseHandle(hThread);//关闭线程句柄。只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了。并没有结束线程。
//下面是主线程的执行路径
for (int i = 0; i < 10; i++) {
WaitForSingleObject(hMutex, INFINITE);//请求一个互斥量锁
cout << i << " : Main Thread Display!" << endl; //cout << i << " :Main Thread Display!\n";
ReleaseMutex(hMutex);//释放互斥量锁,hMutex为释放的互斥量句柄
Sleep(100);
}
system("pause");
return 0;
}
运行结果:
多线程编程实例2:
两个子线程 + 主线程 + 互斥锁:
#include <windows.h>
#include <iostream>
using namespace std;
HANDLE hMutex = NULL;//互斥量,访问同一个资源只需一个互斥量
//子线程1
DWORD WINAPI Fun1(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++) {
WaitForSingleObject(hMutex, INFINITE);//请求一个互斥量锁
cout << i << " : Fun A Thread Fun Display!" << endl; //有的时候程序没有输出换行
Sleep(100);
ReleaseMutex(hMutex);//释放互斥量锁,hMutex为释放的互斥量句柄
}
return 0L;
}
//子线程2
DWORD WINAPI Fun2(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++) {
WaitForSingleObject(hMutex, INFINITE);//请求一个互斥量锁
cout << i << " : Fun2 A Thread Fun2 Display!" << endl; //有的时候程序没有输出换行
Sleep(100);
ReleaseMutex(hMutex);//释放互斥量锁,hMutex为释放的互斥量句柄
}
return 0L;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, Fun1, NULL, 0, NULL);//创建线程
HANDLE hThread2 = CreateThread(NULL, 0, Fun2, NULL, 0, NULL);//创建线程
hMutex = CreateMutex(NULL, FALSE, L"screen");//创建互斥体 第三个参数是Mutex的名称:还可以写成 TEXT("screen")
CloseHandle(hThread);//关闭线程句柄。只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了。并没有结束线程。
CloseHandle(hThread2);
//下面是主线程的执行路径
for (int i = 0; i < 10; i++) {
WaitForSingleObject(hMutex, INFINITE);//请求一个互斥量锁
cout << i << " : Main Thread Display!" << endl; //cout << i << " :Main Thread Display!\n";
ReleaseMutex(hMutex);//释放互斥量锁,hMutex为释放的互斥量句柄
Sleep(100);
}
system("pause");
return 0;
}
运行结果:
多个线程访问同一个资源可以用一把锁。