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 }
  • 相关阅读:
    指针数组与数组指针
    209. 长度最小的子数组
    面试题 05.08. 绘制直线(位运算)
    1160. 拼写单词
    88. 合并两个有序数组
    80. 删除排序数组中的重复项 II(On)
    python自定义异常和主动抛出异常
    类的构造方法1(类中的特殊方法)
    python之判断一个值是不是可以被调用
    主动调用其他类的成员(普通调用和super方法调用)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8405678.html
Copyright © 2011-2022 走看看