信号量

创建信号量:
HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, 
                        LONG lInitialCount, LONG lMaximumCount, 
                        LPCTSTR lpName);
1:lpSemaphoreAttributes应设为NULL;
2:lInitialCount信号量的初始态,必须大于等于0;
3:MaximumCount信号量允许的最大计数值,必须大于0.注意lInitialCount应小于等于MaximumCount,否则会创建失败
4:lpName可选的对象命名
释放信号量:
BOOL ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, 
                       LPLONG lpPreviousCount);
1:hSemaphore,信号量句柄
2:lReleaseCount,信号量计数器增加的数值
3:lpPreviousCount,接收信号量前一次资源的计数值
   
   

// MyThread.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <windows.h>

#include <commctrl.h>

 

HANDLE hSem;

 

DWORD MyThread1(VOID)

{

     INT32 i = 0;

 

     while(1) {

         WaitForSingleObject(hSem, INFINITE);

         printf("1:%d/n",i++);

         ReleaseSemaphore(hSem,1,NULL);

     }

 

     return 0;

}

 

DWORD MyThread2(VOID)

{

     INT32 i = 0;

 

     while(1) {

         WaitForSingleObject(hSem, INFINITE);

         printf("2:%d/n",i++);

         ReleaseSemaphore(hSem,1,NULL);

     }

 

     return 0;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

     HANDLE hThread1;

     HANDLE hThread2;

 

     hSem = CreateSemaphore(NULL, 0, 1, NULL);

     if(NULL == hSem)   {

         printf("Create hSem error/n");

         return -1;

     }

 

     hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread1, NULL, 0, NULL);

     if(hThread1)  {

         printf("CreateThread MyThread1 success/r/n");

     }    else {

         printf("CreateThread MyThread1 error/r/n");

         return -1;

     }   

 

     hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread2, NULL, 0, NULL);

     if(hThread2)  {

         printf("CreateThread MyThread2 success/r/n");

     }    else {

         printf("CreateThread MyThread2 error/r/n");

         return -1;

     }

    

     Sleep(5000);

     ReleaseSemaphore(hSem,1,NULL);

 

     while(1) {

         Sleep(1000);

     }

    

 

     CloseHandle(hThread1);

     CloseHandle(hThread2);

 

     return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值