• 25.互斥锁


    • 创建互斥锁
      1 SRWLOCK g_lock;

      注意一个线程仅能锁定资源一次,不能多次锁定资源

    • 读取期间锁定数据,数据无法被外部线程修改
      1 AcquireSRWLockShared(&g_lock);
    • 释放互斥锁
      1 AcquireSRWLockShared(&g_lock);

    完整代码:(一个进程读,是个进程写,读的时候不能写,写的时候不能读)

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <Windows.h>
     4 
     5 int num = 6400000;
     6 SRWLOCK g_lock;
     7 // 注意一个线程仅能锁定资源一次,不能多次锁定资源
     8 DWORD WINAPI read(void*p)
     9 {
    10     AcquireSRWLockShared(&g_lock);//读取期间,锁定数据,数据无法被修改
    11     int i = 0;
    12     while (1)
    13     {
    14         Sleep(1000);
    15         printf("
    第%d秒num=%d",i, num);
    16 
    17         if (i==20)
    18         {
    19             break;
    20         }
    21         i++;
    22     }
    23     ReleaseSRWLockShared(&g_lock);
    24 
    25 }
    26 
    27 //写数据
    28 DWORD WINAPI write(void *p)
    29 {
    30     AcquireSRWLockExclusive(&g_lock);//锁定写入,
    31     printf("
    开始写入");
    32     for (int i = 0; i < 100000; i++)
    33     {
    34         num--;
    35     }
    36     ReleaseSRWLockExclusive(&g_lock);//
    37     printf("
    结束写入");
    38 
    39 }
    40 
    41 
    42 void main()
    43 {
    44     InitializeSRWLock(&g_lock);//初始化
    45 
    46 
    47     CreateThread(NULL, 0, read, NULL, 0, NULL);
    48 
    49 
    50     HANDLE hd[64];
    51     for (int i = 0; i < 64; i++)
    52     {
    53         hd[i] = CreateThread(NULL, 0, write, NULL, 0, NULL);
    54     }
    55 
    56     WaitForMultipleObjects(64, hd, TRUE, INFINITE);
    57 
    58     printf("
     last=%d", num);
    59 
    60 
    61 
    62 
    63 
    64 
    65 
    66     system("pause");
    67 }
  • 相关阅读:
    Run Shell Commands in Python
    在Linux系统上查找文件
    Build a Beautiful oh-my-zsh Themes
    Build VM Cluster on CentOS Host
    色彩学笔记
    Pr PS 笔记
    pthread 笔记
    图片格式
    win DLL 笔记
    XVS 操作
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8409221.html
Copyright © 2020-2023  润新知