关于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;  
}  
    

备注:有些代码太长,留着方便查阅

  Previous post 进程同步合作
Next post   关于首页在线音乐说明

添加新评论

  Timeline

我们来自五湖四海,转眼就要各奔东西。
--- updated on 2020年12月1日

  关于博主

计科学生一枚,现在变社畜了,依旧热爱分享,有趣想法也会尝试用代码实现;
建这个博客初衷在于记一些自己笔记和想法,方便自己查阅;
本博客内核采用 Typecho开源代码,平时也可能分享一些开源资源,若侵犯您版权,请联系我删除。

  近期评论

  • 暂无评论

无论有多困难,都坚强地抬头挺胸,告诉所有人,你并非他们想象的那样不堪一击。

每个人心里都有一段伤痕,时间才是最好的疗剂。

人总是珍惜未得到的,而遗忘了所拥有的。

退一步,并不象征我认输;放手,并不表示我放弃;微笑,并不意味我快乐!

人海中再回首,朋友真诚依旧,生命里重逢,心境平和温柔,往事如风,岁月如歌,漫漫人生路,苍桑几许,幸福几何!