zoukankan      html  css  js  c++  java
  • 18.C语言多线程总结

    • 创建一个线程
      1 _beginthread(myfun, 0, NULL);//返回值是一个HANDLE
      1 hd[i] = CreateThread(NULL, 0, add, NULL, 0, NULL);//创建线程
    • 线程内部结束
      1 _endthread()
    • 外部暂停线程
      1 SuspendThread(hd[0]);
    • 外部恢复线程
      1 ResumeThread(hd[0]);
    • 外部结束一个线程
      1 ExitThread(th[0]);
    • 创建临界区
      1 CRITICAL_SECTION cs1;

      临界区支持的最大线程数为64

    • 初始化临界区
      1 InitializeCriticalSection(&cs1);
    • 进入临界区
      1 EnterCriticalSection(&cs1);
    • 离开临界区
      1 LeaveCriticalSection(&cs1);

    一个示例,一百个线程每个线程对一个变量进行操作

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <Windows.h>
     4 #define N 64//临界区最大线程64
     5 
     6 CRITICAL_SECTION cs1 ;//定义临界区
     7 
     8 
     9 int num = 0;//多线程访问会造成冲突,要用到临界区
    10 
    11 DWORD WINAPI myfun(void *p)
    12 {
    13     //进入临界区
    14     EnterCriticalSection(&cs1);
    15     for (int i = 0; i < 10000; i++)
    16     {
    17         num++;    
    18     }
    19     //离开临界区
    20     LeaveCriticalSection(&cs1);
    21     return 0;
    22 }
    23 
    24 void main()
    25 {
    26     //初始化临界区
    27     InitializeCriticalSection(&cs1);
    28     //线程数组
    29     HANDLE hd[N];
    30     for (int i = 0; i < N; i++)
    31     {
    32         //数组每一个元素都是一个线程
    33         //hd[i] = (HANDLE)_beginthread(myfun, 0, NULL);
    34         hd[i]=CreateThread(NULL, 0, myfun, NULL, 0, NULL);
    35         //WaitForSingleObject(hd[i], INFINITE);//等一个线程退出再执行
    36     }
    37     //等待所有的线程退出
    38     WaitForMultipleObjects(N, hd, TRUE, INFINITE);
    39 
    40     printf("%d
    ", num);
    41 
    42     //删除临界区
    43     DeleteCriticalSection(&cs1);
    44     system("pause");
    45 }
  • 相关阅读:
    IDEA SpringBoot项目连接数据库报Acess denied错误解决方法
    字符流中出现的第一个字符
    数组中重复的数字
    替换空格
    数组中次数超过一半的数字
    表示数值的字符串
    正则表达式匹配
    SpringMVC中的视图和视图解析器
    IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示
    spring中注解注入 context:component-scan 的使用说明
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8405678.html
Copyright © 2011-2022 走看看