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 }
  • 相关阅读:
    Lua脚本语法说明(修订)
    C++ 程序文档生成器介绍(doxygen)
    [转]最快速度找到内存泄漏
    MyEclipse 8.5下安装tomcat插件
    Linux解压rar文件(unrar安装和使用,分卷解压)
    禁止root用户远程登录或者禁止其他用户登录而不删除它
    linux配置IP的方法
    log4j xml配置详解
    Sqlldr使用介绍
    Linux查看CPU和内存使用情况
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8405678.html
Copyright © 2011-2022 走看看