关于lock unlock 和篇PV操作在同步互斥等同效果示例
1.首先是 lock unlock实现互斥:
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE Semaphore;//声明
DWORD WINAPI MyThread1(LPVOID lpParamter)
{
while (1)
{
WaitForSingleObject(Semaphore, INFINITE);//lock
cout<<"Hello ";Sleep(1);
cout<<"world! ";Sleep(1);
cout<<endl;
ReleaseMutex(Semaphore);//unlock
}
}
DWORD WINAPI MyThread2(LPVOID lpParamter)
{
while (1)
{
WaitForSingleObject(Semaphore, INFINITE);//lock
cout<<"How ";Sleep(1);
cout<<"are ";Sleep(1);
cout<<"you! ";Sleep(1);
cout<<endl;
ReleaseMutex(Semaphore);//unlock
}
}
int main()
{
Semaphore = CreateMutex(NULL, FALSE, "screen");//创建互斥锁
//创建子线程
CreateThread(NULL, 0, MyThread1, NULL, 0, NULL);
CreateThread(NULL, 0, MyThread2, NULL, 0, NULL);
Sleep(500); //线程执行时间
return 0;
}
2.PV操作实现互斥:
/*信号灯互斥*/
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include "conio.h"
using namespace std;
HANDLE Semaphore; //声明信号量
DWORD WINAPI MyThread1(PVOID pvParam)
{
WaitForSingleObject(Semaphore,INFINITE); //p(Semaphore)
cout<<"Hello ";
//Sleep(1);
cout<<"world! ";
//Sleep(1);
cout<<endl;
ReleaseSemaphore(Semaphore,1,NULL); //v(Semaphore)
return 0;
}
DWORD WINAPI MyThread2(PVOID pvParam)
{
WaitForSingleObject(Semaphore,INFINITE); //p(Semaphore)
cout<<"How ";
//Sleep(1);
cout<<"are ";
//Sleep(1);
cout<<"you! ";
//Sleep(1);
cout<<endl;
ReleaseSemaphore(Semaphore,1,NULL); //v(Semaphore)
return 0;
}
int main()
{
Semaphore=CreateSemaphore(NULL,1,1,NULL); //信号灯初始化为1,第二个参数为初始值,第三个为最大值
//创建子线程
CreateThread(NULL, 0, MyThread1, NULL, 0, NULL);
CreateThread(NULL, 0, MyThread2, NULL, 0, NULL);
Sleep(100); //主线程等待
return 0;
}
备注:有些代码太长,留着方便查阅
Tags : 本文未设置标签
Previous post
进程同步合作
Next post
关于首页在线音乐说明