• 创建一个线程

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

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

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

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

 #include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define N 64//临界区最大线程64 CRITICAL_SECTION cs1 ;//定义临界区 int num = ;//多线程访问会造成冲突,要用到临界区 DWORD WINAPI myfun(void *p)
{
//进入临界区
EnterCriticalSection(&cs1);
for (int i = ; i < ; i++)
{
num++;
}
//离开临界区
LeaveCriticalSection(&cs1);
return ;
} void main()
{
//初始化临界区
InitializeCriticalSection(&cs1);
//线程数组
HANDLE hd[N];
for (int i = ; i < N; i++)
{
//数组每一个元素都是一个线程
//hd[i] = (HANDLE)_beginthread(myfun, 0, NULL);
hd[i]=CreateThread(NULL, , myfun, NULL, , NULL);
//WaitForSingleObject(hd[i], INFINITE);//等一个线程退出再执行
}
//等待所有的线程退出
WaitForMultipleObjects(N, hd, TRUE, INFINITE); printf("%d\n", num); //删除临界区
DeleteCriticalSection(&cs1);
system("pause");
}

18.C语言多线程总结的更多相关文章

  1. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  2. C 语言多线程与锁机制

    C 语言多线程与锁机制 多线程 #include <pthread.h> void *TrainModelThread(void *id) { ... pthread_exit(NULL) ...

  3. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  4. C语言 多线程测试

    1.CreateThread 在主线程的基础上创建一个新线程 2.WaitForMultipleObjects 主线程等待子线程 3.CloseHandle 关闭线程 // testThread.cp ...

  5. c语言多线程队列读写

    最近用c语言写了个简单的队列服务,记录一下,文件结构为 main.c queue.c queue.h,代码如下: 主函数 #define NUM_THREADS 200 #include <st ...

  6. C语言多线程编程

    HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUT ...

  7. c#语言-多线程中的锁系统(一)

    介绍 平常在多线程开发中,总避免不了线程同步.本篇就对net多线程中的锁系统做个简单描述.   目录 一:lock.Monitor        1:基础.        2: 作用域.       ...

  8. C语言多线程的一个简单例子

    多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  9. C语言多线程pthread库相关函数说明

    线程相关操作说明 一 pthread_t pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义: typedef unsigned long int pth ...

随机推荐

  1. easyui combobox 取值

    easyui combobox 取值 var zhudaoci = $.trim($('#spanZhudaociId').combobox('getValue')); 学习了:http://blog ...

  2. 安卓ContentObserver模式获取短信用正则自己主动填充验证码

    近期做注冊的时候看到非常多app在手机接受到短信的时候直接填写验证码到界面省略用户自己主动输入,感觉这样确实蛮人性化的呵呵.于是自己也做了一个 步骤: 首先我使用了ContentObserver监听短 ...

  3. Android中集成ffmpeg(一):编译ffmpeg

    方案选择 Android中集成ffmpeg的codec功能无非两种方式: JNI直接调用,主要用于App开发(无权限修改系统底层),如EXOPlayer,JPlayer等. 集成ffmpeg到OMX, ...

  4. Armbian hostname and WiFi configuration

    In previous post i have described installation of Armbian on Orange Pi PC Plus. Now is the time for ...

  5. 传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点

    传说用户发来的请求是在JIoEndpoint的accept函数中接收的, 这是tomact与外界交互的分界点,所以来研究一下, >>>>>>>>> ...

  6. Network Stack‎ : HTTP authentication

    HTTP authentication As specified in RFC 2617, HTTP supports authentication using the WWW-Authenticat ...

  7. node.学习笔记(关于http2的讲解)

    个人总结:读完这篇文章需要30分钟 http2部分很有学习价值,可以好好看.  用node搭建TCP服务器 用node搭建HTTP服务器 用node文件fs模块对文件读取,并用流的方式写入 用url路 ...

  8. WebAssembly学习(六):AssemblyScript - 限制与类型

    一.限制 将无类型的JavaScript编译为WebAssembly没有意义,因为它最终会导致运行其中较慢的一个JavaScript. 相反,AssemblyScript专注于WebAssembly擅 ...

  9. IDEA下使用maven的mybatis错误—XXXDao is not known to the MapperRegistry

    # IDEA下使用maven的mybatis常见错误(二) 错误类型二:mybatis.xml注册映射文件错误 错误提示:Type interface com.aynu.dao.CountryDao ...

  10. 最近学习了一下DeepLearning,发现时NB。

    持续关注,有空放个算法到线上的推荐上.