windows与linux多线程对比
一.创建线程
1>windows
HANDLE aThread[MAX_THREAD];
函数原型:
HANDLE WINAPI CreateThread(_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize,_In_ LPTHREAD_START_ROUTINE lpStartAddress,_In_opt_ LPVOID lpParameter,_In_ DWORD dwCreationFlags,_Out_opt_ LPDWORD lpThreadId);
参数说明:
lpThreadAttributes 表示线程内核对象的安全属性;NULL表示使用默认设置;
dwStackSize 表示线程栈空间的大小;0表示使用默认大小(1MB);
lpStartAddress 表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址;
lpParameter 传给线程函数的参数;
dwCreationFlags 指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread();
lpThreadId 返回线程的ID号,NULL表示不需要返回该线程的ID号。
线程创建成功返回新线程的句柄,不成功则返回NULL。
2>linux
pthread_t aThread[MAX_THREAD];
函数原型:
int pthread_create(pthread_t* tidp,const pthread_attr_t* attr,void* (*start_rtn)(void*),void* arg);
参数说明:
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性,NULL表示默认设置。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数,NULL表示无参数传递。
若线程创建成功,则返回0。若线程创建失败,则返回出错编号。
二.创建信号量
1>windows
HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName
);
参数说明:
lpSemaphoreAttributes 信号量的属性,一般设置为NULL。
lInitialCount 信号量初始值,0~lpMaximumCount之间.如果lInitialCount 的初始值为0,则该信号量默认为unsignal状态;如果lInitialCount的初始值大于0,则该信号量默认为signal状态。
lMaximumCount 设置信号量的最大计数。
lpName 指定信号量对象的名称,NULL表示无名的信号量。
成功返回信号量对象的句柄,失败返回NULL。
2>linux
int sem_init(sem_t *sem, int pshared, unsigned int value);
参数说明:
sem 指向信号量对象
pshared 指明信号量的类型。不为0时,表示此信号量在进程间共享;为0时,表示只能为当前进程的所有线程共享。
value 信号量初始值
成功时返回 0;错误时,返回 -1,并把 errno 设置为合适的值。
三.操作信号量
1>windows
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
);
参数说明;
hSemaphore 所要操作的信号量对象的句柄,这个句柄是CreateSemaphore或者OpenSemaphore函数的返回值。这个句柄必须有SEMAPHORE_MODIFY_STATE 的权限。
lReleaseCount 这个信号量对象在当前基础上所要增加的值,这个值必须大于0,如果信号量加上这个值会导致信号量的当前值大于信号量创建时指定的最大值,那么这个信号量的当前值不变,同时这个函数返回FALSE;
lpPreviousCount 指向返回信号量上次值的变量的指针,如果不需要信号量上次的值,那么这个参数可以设置为NULL;
成功返回TRUE;如果失败返回FALSE,可以调用GetLastError函数得到详细出错信息.
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
)
参数说明;
hHandle 内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0
dwMilliseconds 需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。
如果等待超时,该函数返回WAIT_TIMEOUT。如果该函数失败,返回WAIT_FAILED。
2>linux
int sem_post(sem_t *sem);
成功时返回 0;错误时,信号量的值没有更改,-1 被返回,并设置 errno 来指明错误。
int sem_wait(sem_t *sem);
成功时返回 0;错误时,信号量的值没有更改,-1 被返回,并设置 errno 来指明错误。
四.销毁信号量
1>windows
BOOL CloseHandle(HANDLE hObject);
2>linux
int sem_destroy(sem_t *sem);
转载于:https://www.cnblogs.com/march01/p/10637774.html
windows与linux多线程对比相关推荐
- 一次简单的Windows和Linux多线程效率测试
一次简单的Windows和Linux多线程效率测试 配置 执行时间 源代码 其他 配置 参数 Windows Linux IDE msvc2015 g++ (GCC) 版本 14.0.25420.01 ...
- netstat命令参数及其应用方式(Windows与Linux的对比)
目录 1 概述 2 netstat 命令详解 2.1 Windows下该命令的参数 2.2 Linux下该命令的参数 2 应用 2.1 查看端口开启情况来判断是否有异常通信 2.2 寻找特定端口情况 ...
- linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...
并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...
- windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究
摘要:把驱动框架分为三层,针对各层在Windows和Linux中的实现方法的不同,对Windows和Linux的设备驱动框架进行对比研究.从接口函数,应用程序访问驱动程序的路径,驱动程序具体实现及安装 ...
- Windows与Linux的命令行命令对比
Windows与Linux的命令行命令对比 * Windows不区分大小写,Linux区分大小写的. sn DOS Command UNIX Equivalent Effect 影响 1 ASSIGN ...
- 操作系统:Linux vs Windows内核与应用对比
文章目录 操作系统架构:Linux vs Windows 桌面系统 内核设计 什么是内核? Linux 内核的设计 MultiTask SMP ELF Monolithic Kernel Window ...
- windows主机跟linux主机对比
就性价比这一方面来说,Linux主机的优势是显而易见的.因为Linux作为资源管理和操作系统来说,是开源.免费的. 虽然目前国内Windows操作系统占据着主导地位.但是正版的Windows的操作系统 ...
- 《Linux多线程服务端编程:使用muduo C++网络库》书摘6.6.2节
6.6.2 常见的并发网络服务程序设计方案 W. Richard Stevens 的<UNIX 网络编程(第2 版)>第27 章"Client-ServerDesign Alte ...
- 《Linux多线程服务端编程:使用muduoC++网络库》学习笔记
文章目录 第1章 线程安全的对象生命期管理 1.1 当析构函数遇到多线程 1.1.1 线程安全的定义 1.1.3 线程安全实例 1.2 对象的创建很简单 1.3 销毁很难 1.4 线程安全的Obser ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
最新文章
- Go 学习笔记(78)— Go 标准库 net/http 创建服务端(接收 GET、POST 请求)
- 日志处理logger
- PPLcnet和YOLO的碰撞,真的能在cpu上快到起飞?
- 推荐一个代码自动完成的工具AutoCode
- Ping一下Github,确认本地DNS无法解析方法
- virtual方法(虚方法)与abstract(抽象方法)的区别
- 预处理命令 || 宏定义 || 带参数的宏定义
- [ATF]-MTK:一篇文章了解ATF原理
- 作为一名 ABAP 资深顾问,下一步可以选择哪一门 SAP 技术作为主攻方向?
- android viewpager 滑动方法,Android中Viewpager禁止滑动的实现
- 洲明科技与意法半导体合作开发新一代LED显示屏
- Python:线程、进程与协程(5)——multiprocessing模块(2)
- git2.28下载 GIT2.28新版本网盘下载
- 程序员大保健指南,给自己的身心偶尔放松的机会
- vbox win10 分辨率_告诉你win10系统设置屏幕分辨率的两种方法
- 一个大型网站图片服务器架构的演进
- 团队作业8----第二次项目冲刺(Beta阶段) 第三天
- ubuntu(linux) 命令行设置wifi账户密码 python脚本设置wifi
- android ibeacon模拟器,未使用信标模拟器检测到iBeacon
- 计算机网络——cookie、session、token原理
热门文章
- 百度地震了,也许早晚的事
- 数据探索很麻烦?推荐一款史上最强大的特征分析可视化工具:yellowbrick
- 从技术到求职,强烈推荐一下这9个牛逼的公众号
- R 包 `ezdf`的讲解
- PopupWindow点击空白区域消失
- 63.1拓展之box-shadow属性
- Material使用09 MdCheckboxModule、MdMenuModule、MdTooltipModule
- [转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
- ODI11G 在Linux上的安装配置
- EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离