原子锁 不同的线程中 操作同一个数值 不受其他线程干扰 操作完成后其他线程可以操作数值
.版本 2
.DLL命令 原子递增变量, 整数型, , "InterlockedIncrement", , 参数+1
.参数 累加的数值, 整数型, 传址, 需要+1的参数
.DLL命令 原子增加变量, 整数型, , "InterlockedExchangeAdd", , 参数增加自定义的值
.参数 操作数, 整数型, 传址, 需要操作的参数
.参数 欲增加的数字, 整数型, , 需要加的数 负数就是减
.DLL命令 原子递减变量, 整数型, , "InterlockedDecrement", , 参数-1
.参数 递减的数值, 整数型, 传址, 需要-1的参数
===============================================================================
许可证 不同的线程中 操作同一段代码 不受其他线程干扰 操作完成后其他线程可以操作代码 比如写文件 写数据 防止重复操作 仅读文件可以不用
多线程支持库->多线程控制
.版本 2
许可去证明 = 创建进入许可证 ()
进入许可区 (许可去证明)
退出许可区 (许可去证明)
删除进入许可证 (许可去证明)
===============================================================================
事件对象 内核级别 创建一个对象 3个功能 有信号 无信号 等待信号 有返回值 设计多个线程同步数据使用 排队之类的
.版本 2
.DLL命令 事件_创建事件对象, 整数型, "kernel32", "CreateEventA", 公开, 创建一个事件对象 如执行成功,返回事件对象句柄;零表示出错。
.参数 安全结构, 整数型, , 安全结构。默认可不写,留0即可。**可0
.参数 是否手动事件, 整数型, , 如果为真(1)则为手动重设。为假(0)则为自动重设事件。
.参数 初始是否有信号, 整数型, , 该事件是否一开始就有信号。1有信号,0没信号。
.参数 事件名称, 文本型, , 指定事件对象的名字。名字是用作多进程同步的,一般不使用。**可空
.DLL命令 事件_置为有信号, 整数型, "kernel32", "SetEvent", 公开
.参数 事件对象句柄, 整数型
.DLL命令 事件_置为无信号, 整数型, "kernel32", "ResetEvent", 公开
.参数 事件对象句柄, 整数型
.DLL命令 等待内核对象, 整数型, "kernel32", "WaitForSingleObject", 公开, 等待一个内核对象。超时返回258,等待成功返回0
.参数 内核对象句柄, 整数型
.参数 超时时间, 整数型, , **超时时间 到时间没有信号返回 258 ,-1 无限等待
用法 : 程序集_事件对象句柄 = 事件_创建事件对象 (0, 1, 1, “”)
===============================================================================
信号量 可以设置队列 线程队列 设置放行数量 比如设置3个 后面可以等待信号处会执行3次 3个信号用完 再有等待信号会卡住 知道添加一个信号 可以用于队列上面任务执行完成后在执行后面的
比如3个人(3个信号)正在搬3堆砖(3个代码段或线程,当前信号被用完 目前是0) 等第一个人搬完自己的砖后(第一个代码段或线程结束) 向工头示意后(信号+1) 工头安排第4堆砖 (有信号后继续后面代码或线程)
.版本 2
.DLL命令 信号量_创建, 整数型, "kernel32", "CreateSemaphoreA", 公开, 创建一个新的信号机 如执行成功,返回信号机对象的句柄;零表示出错。会设置GetLastError。即使返回一个有效的句柄,但倘若它指出同名的一个信号机已经存在,那么GetLastError也会返回ERROR_ALREADY_EXISTS
.参数 安全结构, 整数型, , 安全结构。默认可不写,留0即可。**可0
.参数 信号量初始值, 整数型, , 设置信号机的初始计数
.参数 信号量最大值, 整数型, , 设置信号机的最大计数
.参数 信号量名字, 文本型, , 指定信号机对象的名称。名字是用作多进程同步的,一般不使用。**可空
.DLL命令 信号量_释放, 整数型, "kernel32", "ReleaseSemaphore", 公开, 释放信号量对象,释放之后,信号量会增加对应的数量**就叫释放 其实是加
.参数 信号量句柄, 整数型
.参数 释放的数量, 整数型, , **信号加几
.参数 保留参数0, 整数型, , **不懂
.版本 2
.DLL命令 等待内核对象, 整数型, "kernel32", "WaitForSingleObject", 公开, 等待一个内核对象。超时返回258,等待成功返回0
.参数 内核对象句柄, 整数型
.参数 超时时间, 整数型, , **超时时间 到时间没有信号返回 258 ,-1 无限等待
程序集_信号量句柄 = 信号量_创建 (0, 1, 10, “”)
等待返回值 = 等待内核对象 (程序集_信号量句柄, 5000)