• 创建一个线程

     _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. 【翻译自mos文章】私有网络所用的协议 与 Oracle RAC

    说的太经典了,不敢翻译.直接上原文. 来源于: Network Protocols and Real Application Clusters (文档 ID 278132.1) PURPOSE --- ...

  2. hadoop集群中动态添加新的DataNode节点

    集群中现有的计算能力不足,须要另外加入新的节点时,使用例如以下方法就能动态添加新的节点: 1.在新的节点上安装hadoop程序,一定要控制好版本号,能够从集群上其它机器cp一份改动也行 2.把name ...

  3. c++动态库中使用命名空间的问题

    这是C++才会有的语言特性. 假如你使用一个程序库,他里面有桓霰淞拷衋bc,可是你自己也不小心定义了一个叫abc的变量,这样就会引起重定义错误.所以为了避免这样的现象,C++引入了名字空间(names ...

  4. netsh http的使用

    1.首先通过cmd进入 C:\Windows\System32\inetsrv>netshnetsh>http netsh http> 退出的时候,使用exit命令 2.显示监听的i ...

  5. tomcat安装部署

    1.tomcat6 下载地址 http://tomcat.apache.org/download-60.cgi 下载的话,下载那个.tar.gz后缀名的即可. 好像在 Linux.Unix上tomca ...

  6. 快速架设OpenStack云基础平台

    通常在linux下手工安装openstack比较麻烦,StackOps是一个可以快速安装的Openstack解决方案,首先我们下载StackOps的iso文件(stackops-0.5-b1312-d ...

  7. excel导入数据的

    .aspx 文件 <form id="form1" runat="server"> <div> <asp:FileUpload I ...

  8. Network Stack‎ : HTTP authentication

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

  9. sublime 编辑器汉化

    一.下载Sublime编辑器 官网下载地址:http://www.sublimetext.com/3 二.下载汉化包 汉化包下载地址:http://files.cnblogs.com/akwwl/su ...

  10. 9.9递归和动态规划(九)——N皇后

    /**  * 功能:打印八皇后在8*8棋盘上的各种摆法.当中每一个皇后都不同行.不同列,也不在对角线上.  * 这里的"对角线"指的是全部的对角线,不仅仅是平分整个棋盘的那两条对角 ...