/*
利用互斥对象实现线程同步
*/
#include <iostream>
#include <Windows.h>
using namespace std;
//线程1
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
//线程2
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets = 100;
HANDLE hMutex;
int main()
{
HANDLE hThread1;
HANDLE hThread2;
//创建互斥对象
//第一个参数:是一个结构体指针,NULL表示让互斥对象使用默认的安全性
//第二个参数:指定互斥对象的初始拥有者,FALSE表示main函数不获得所有权
//第三个参数:指定互斥对象的名称,NULL表示创建一个匿名的互斥对象
hMutex = CreateMutex(NULL, FALSE, NULL);
//创建线程
hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(4000);
return 0;
}
//线程1入口
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
char buf[100] = { 0 };
while (TRUE)
{
//上锁,设置无信号
//第一个参数:传递已创建的互斥对象的句柄hMutex
//第二个参数:INFINITE表示一直等待,直到有信号才返回
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
sprintf_s(buf, "thread1 sell ticket : %d\n", tickets);
cout << buf;
tickets--;
}
else
break;
ReleaseMutex(hMutex); //解锁
}
return 0;
}
//线程2入口
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
char buf[100] = { 0 };
while (TRUE)
{
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
sprintf_s(buf, "thread2 sell ticket : %d\n", tickets);
cout << buf;
tickets--;
}
else
break;
ReleaseMutex(hMutex); //解锁
}
return 0;
}
运行结构
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。