多线程编程(7) - 从 CreateThread 说起[续五]
function CreateThread(lpThreadAttributes: Pointer; {安全设置}dwStackSize: DWORD;lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD;var lpThreadId: DWORD ): THandle; stdcall;
CreateThread 的第一个参数 lpThreadAttributes 是指向 TSecurityAttributes 结构的指针, 一般都是置为 nil, 这表示没有访问限制; 该结构的定义是:
//TSecurityAttributes(又名: SECURITY_ATTRIBUTES、_SECURITY_ATTRIBUTES) _SECURITY_ATTRIBUTES = recordnLength: DWORD; {结构大小}lpSecurityDescriptor: Pointer; {默认 nil; 这是另一个结构 TSecurityDescriptor 的指针}bInheritHandle: BOOL; {默认 False, 表示不可继承} end;//TSecurityDescriptor(又名: SECURITY_DESCRIPTOR、_SECURITY_DESCRIPTOR) _SECURITY_DESCRIPTOR = recordRevision: Byte;Sbz1: Byte;Control: SECURITY_DESCRIPTOR_CONTROL;Owner: PSID;Group: PSID;Sacl: PACL;Dacl: PACL; end;
够复杂的, 但我们在多线程编程时不需要去设置它们, 大都是使用默认设置(也就是赋值为 nil).
我觉得有必要在此刻了解的是: 建立系统内核对象时一般都有这个属性(TSecurityAttributes);
在接下来多线程的课题中要使用一些内核对象, 不如先盘点一下, 到时碰到这个属性时给个 nil 即可, 不必再费神.
{建立事件} function CreateEvent(lpEventAttributes: PSecurityAttributes; {!}bManualReset: BOOL;bInitialState: BOOL;lpName: PWideChar ): THandle; stdcall;{建立互斥} function CreateMutex(lpMutexAttributes: PSecurityAttributes; {!}bInitialOwner: BOOL;lpName: PWideChar ): THandle; stdcall;{建立信号} function CreateSemaphore(lpSemaphoreAttributes: PSecurityAttributes; {!}lInitialCount: Longint;lMaximumCount: Longint;lpName: PWideChar ): THandle; stdcall;{建立等待计时器} function CreateWaitableTimer(lpTimerAttributes: PSecurityAttributes; {!}bManualReset: BOOL;lpTimerName: PWideChar ): THandle; stdcall;
上面的四个系统内核对象(事件、互斥、信号、计时器)都是线程同步的手段, 从这也能看出处理线程同步的复杂性; 不过这还不是全部, Windows Vista 开始又增加了 Condition variables(条件变量)、Slim Reader-Writer Locks(读写锁)等同步手段.
不过最简单、最轻便(速度最快)的同步手段还是 CriticalSection(临界区), 但它不属于系统内核对象, 当然也就没有句柄、没有 TSecurityAttributes 这个安全属性, 这也导致它不能跨进程使用; 不过写多线程时一般不用跨进程啊, 所以 CriticalSection 应该是最常用的同步手段.
下次接上, 开始学习多线程的同步了.
多线程编程(7) - 从 CreateThread 说起[续五]相关推荐
- C++使用Windows API CreateMutex函数多线程编程
C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ...
- 多线程编程CreateThread和_beginthreadex用法
多线程编程 1.CreateThread HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //内核对象的安全 ...
- [转]Linux 的多线程编程的高效开发经验
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...
- 多线程编程有什么用途_C++ 多线程编程 (一)
What is thread? In computer science, a thread of execution is the smallest sequence of programmed in ...
- C++使用thread类多线程编程
目录 pthread多线程 系统自带CreateThread std::thread c++ 多线程总结_jacke121的专栏-CSDN博客 std thread比较好用,但是系统带的socket不 ...
- Windows多线程编程总结
Windows 多线程编程总结 keyword:多线程 线程同步 线程池 内核对象 1 内核对象 1 .1 内核对象的概念 内核对象是内核分配的一个内存块,这样的内存块是一个数据结构,表示内核对象的各 ...
- Linux 的多线程编程的高效开发经验
背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文 ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 -- DevStore p ...
- Win32 API 多线程编程示例 - 窗口版
网上有一些Win32 多线程编程示例,多是控制台版本:下面哥作一个窗口版本: /*-------------------------------------------------bobo, 2020 ...
最新文章
- MapReduce开发总结
- linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
- ERROR: tensorboard 1.14.0 has requirement setuptools=41.0.0, but you'll have setuptools 39.1.0 whic
- 带你入门 CSS Grid 布局
- 电子元器件首饰!送给你喜欢的女孩!
- EPC Class0 Gen1标签识别代码C++
- servlet下根据相对路径找资源
- 02-eclipse中使用git
- 二维凸包 Graham扫描算法
- 龙星电脑横机制版软件_龙星制版软件下载 龙星电脑横机是什么系统
- android 命令pm 全称 packagemanager,Android.content.pm.PackageManager--(转载)
- word小技巧 将图片批量居中
- 参考文献类型标识码--中英文对照
- UTF-8编码占几个字节?
- 深信服:Weblogic集群负载均衡技术解决方案
- arcgis,裁剪投影不一致的矢量和栅格
- OpenHarmony HDF Input框架模块 按键控制LED基于小熊派micro
- 02 夯实根基,web网页基础
- 使用tesseract训练自己的字库提高识别率
- OI回忆录第一章 逐梦之始
热门文章
- Windows单机之Weblogic 12c受管服务器配置
- php+代码模板下载地址,简单而强大的PHP模板引擎
- Python中TypeError: ‘str‘ object is not callable
- 文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突
- mysql解压版配置win8_Windows安装mysql8解压版
- c++获取一段代码的执行时间_微软IE浏览器JScript脚本引擎远程代码执行漏洞通告...
- linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
- 计算机原理 ---- 程序之下
- nginx ---- nginx.conf核心配置文件
- 用java编写程序_用JAVA编写程序