xiaohuiji190

原子锁  不同的线程中 操作同一个数值 不受其他线程干扰 操作完成后其他线程可以操作数值

.版本 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)

 

分类:

技术点:

相关文章:

  • 2021-06-15
  • 2021-05-27
  • 2022-12-23
  • 2021-06-12
  • 2021-12-09
  • 2021-05-19
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-04-24
  • 2021-11-05
  • 2021-09-14
  • 2022-01-24
  • 2021-06-26
  • 2022-12-23
相关资源
相似解决方案