• 创建一个线程

     _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. Redis封装之Hash

    RedisHashService: /// <summary> /// Hash:类似dictionary,通过索引快速定位到指定元素的,耗时均等,跟string的区别在于不用反序列化,直 ...

  2. 关于Javascript的forEach 和 map

    本篇博客转载自 https://blog.fundebug.com/2018/02/05/map_vs_foreach/ 如果你已经有使用JavaScript的经验,你可能已经知道这两个看似相同的方法 ...

  3. Gym - 100685F Flood BFS

    Gym - 100685F 题意:n个水池之间流水,溢出多少流出多少,多个流出通道的话平均分配,给你每个水池中的水量和容量,问到最后目标水池中水量. 思路:直接用队列扩展,不过这里有一个优化,就是统计 ...

  4. HDU 4359 Easy Tree DP? 组合数学+动归

    题意:定义一种树,每个节点的权值都是20到2n-1,每个权值出现一次,每个节点的左子树的权值和小于右子树,除非只有一个子树.给你n和d,问有n个节点且恰好深度是d的这种树有多少种. 比赛的时候我没有做 ...

  5. 关于vs2012/2013的C编译器生成的exe的向后兼容xp的问题

    问题一:编译出来的exe在xp上面运行提示"不是有效的win32应用程序" 在vs2012/2013版本里面,其自带的c编译器cl.exe,若直接使用cl a.c编译,那么生成出来 ...

  6. WinSocket 编程

    套接字 套接字指通信双方在通信时所使用的通信点(Endpoint),通信的双方通过通信点来交换信息和数据.不同类型的通信会使用不同的类型通信点,比如对于电话通信而言,通信点就是电话号码和分机号码的组合 ...

  7. 新浪新闻按keyword抓取实例

    import urllib2 import requests #import MySQLdb import webbrowser import string import re from Beauti ...

  8. sql-server 2005数据库文件恢复(检測到基于一致性的逻辑 I/O 错误)

    今天sql-server数据库突然报错: SQL Server 检測到基于一致性的逻辑 I/O 错误 校验和不对(应为: 0x7c781313,但实际为: 0x67a313c9). 在文件 'C:\P ...

  9. openfire 开发遇到的些问题

    openfire的 jid    账户名 + '@" + 你的域名      可是当你的账户名中 有大拼音的 时候  就会变成小写   比如     Test  ,  jid  =  tes ...

  10. nagios插件之登陆防火墙实现session监控

    ssh_firewall_session.sh -- 登陆防火墙并运行dis session statistics firewall_check_sessions.c -- 调用上面脚本.过滤出ses ...