zoukankan      html  css  js  c++  java
  • 24.信号量

    • 创建信号量
      1         //创建信号对象并开辟一个信号,最大计数是5,并初始化有五个可以用
      2     HANDLE hSEM = CreateSemaphoreW(NULL, 5, MAX, id);
    • 关闭信号量
      1 CloseHandle(hSEM);
    • 根据Id打开一个信号量
      1 //根据一个id打开一个信号
      2         HANDLE myhsem = OpenSemaphoreW(SEMAPHORE_ALL_ACCESS, FALSE, id);
    • 等待信号量,直到有可用空间
      WaitForSingleObject(myhsem, INFINITE) == WAIT_OBJECT_0
    • 释放信号量,使信号量可用数加1
      1 ReleaseSemaphore(myhsem, 1, NULL);
      2 //或者
      3 //CloseHandle(myhsem);

    完整代码:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <Windows.h>
     4 
     5 #define id "xinhao"
     6 #define MAX 5
     7 
     8 DWORD WINAPI boy(void *p)
     9 {
    10     int *pint = p;
    11     while (TRUE)
    12     {
    13         //根据一个id打开一个信号
    14         HANDLE myhsem = OpenSemaphoreW(SEMAPHORE_ALL_ACCESS, FALSE, id);
    15         //如果等到了信号
    16         if (myhsem)
    17         {
    18             printf("boy%d正在等待
    ", *pint);
    19             if (WaitForSingleObject(myhsem, INFINITE) == WAIT_OBJECT_0)
    20             {
    21                 printf("boy%d得到信号
    ", *pint);
    22                 Sleep(3000);
    23                 printf("boy%d释放信号
    ", *pint);
    24 
    25                 //ReleaseSemaphore(myhsem, 1, NULL);
    26                 CloseHandle(myhsem);
    27             }
    28         }
    29         else
    30         {
    31             printf("信号量获取失败
    ");
    32         }
    33         
    34     }
    35 
    36     return 1;
    37 }
    38 
    39 void main()
    40 {
    41     //创建信号对象并开辟一个信号,最大计数是5,并初始化有五个可以用
    42     HANDLE hSEM = CreateSemaphoreW(NULL, 5, MAX, id);
    43 
    44     
    45 
    46     int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    47     HANDLE hd[10] = { 0 };
    48     for (int i = 0; i < 10; i++)
    49     {
    50         hd[i] = CreateThread(NULL, 0, boy, a + i, 0, NULL);
    51     }
    52 
    53     WaitForMultipleObjects(10, hd, TRUE, INFINITE);
    54     CloseHandle(hSEM);
    55     
    56     system("pause");
    57 }
  • 相关阅读:
    第26月第26天 Domain=AVFoundationErrorDomain Code=-11850
    第26月第25天 ubuntu openjdk-8-jdk jretty
    第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent
    第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
    第26月第20天 springboot
    第26月第18天 mybatis_spring_mvc pom
    python中的字符数字之间的转换函数
    python if else elif statement
    python 赋值魔法
    python print import使用
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8409207.html
Copyright © 2011-2022 走看看