18.C语言多线程总结
- 创建一个线程
_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语言多线程总结的更多相关文章
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- C 语言多线程与锁机制
C 语言多线程与锁机制 多线程 #include <pthread.h> void *TrainModelThread(void *id) { ... pthread_exit(NULL) ...
- linux下C语言多线程编程实例
用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...
- C语言 多线程测试
1.CreateThread 在主线程的基础上创建一个新线程 2.WaitForMultipleObjects 主线程等待子线程 3.CloseHandle 关闭线程 // testThread.cp ...
- c语言多线程队列读写
最近用c语言写了个简单的队列服务,记录一下,文件结构为 main.c queue.c queue.h,代码如下: 主函数 #define NUM_THREADS 200 #include <st ...
- C语言多线程编程
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUT ...
- c#语言-多线程中的锁系统(一)
介绍 平常在多线程开发中,总避免不了线程同步.本篇就对net多线程中的锁系统做个简单描述. 目录 一:lock.Monitor 1:基础. 2: 作用域. ...
- C语言多线程的一个简单例子
多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...
- C语言多线程pthread库相关函数说明
线程相关操作说明 一 pthread_t pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义: typedef unsigned long int pth ...
随机推荐
- ECNUOJ 2574 Principles of Compiler
Principles of Compiler Time Limit:1000MS Memory Limit:65536KBTotal Submit:473 Accepted:106 Descripti ...
- Map和Collection详解
Collection -----List -----LinkedList 非同步 ----ArrayList 非同 ...
- leetCode 36.Valid Sudoku(有效的数独) 解题思路和方法
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- ORA-01003: no statement parsed
环境:delphi 5.BDE.oracle10 delphi里面用tStoreProc调用存储过程出现ORA-01003: no statement parsed. 解决方法:tStoreProc. ...
- Trie树的常见应用大总结(面试+附代码实现)
(一)Trie的简单介绍 Trie树,又称字典树,单词查找树或者前缀树.是一种用于高速检索的多叉树结构,如英文字母的字典树是一个26叉树.数字的字典树是一个10叉树. 他的核心思想是空间换时间,空间消 ...
- PipeCAD之管道标准库PipeStd(2)
PipeCAD之管道标准库PipeStd(2) eryar@163.com Key Words. PipeCAD, PipeStd, 管道设计软件,管件库 1. Introduction 管道标准部件 ...
- IDEA中如何设置自动导包
IDEA跟eclipse还是有一些差别,一些东西要自己去设置,但同时也还是有快捷键的方式来帮助我们 1.如何设置自动导包:如下图所示 点击FIle--->settings 其次还可以通过按快捷键 ...
- 25.怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
转自:https://blog.csdn.net/wangyj1992/article/details/78387728 因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我 ...
- 2015北京网络赛 G Boxes BFS+打表
G Boxes 题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的.求摆成升序需要移动多少步. 思路:这里的n很小,只有7.但是bfs最快的情况需要2s左右,所以就打表了. ...
- 安装配置FreeBSD9全过程体验
安装配置FreeBSD9全过程体验(时长11分钟) 总所周知,FreeBSD是一个高效.稳定的UNIX操作系统.在今年年初,FreeBSD 又发布了9.0版本,它将采用全新的文本安装器,升级ZFS文件 ...