云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 快手AAUTE多线程中的交通信号灯

快手AAUTE多线程中的交通信号灯

  • 62 次阅读
  • 3 次下载
  • 2025/7/13 23:23:49

多线程中的交通信号灯:thread.event

标准库中的 thread.event 用于创建线程事件对象,

该对象类似于多线程中的交通信号灯、实现红绿灯机制实现多线程之间的同步协作。

创建 thread.event 对象的代码如下:

源代码 [ AAuto ]

001 import thread.event;

002 var event = thread.event(\交通信号灯\

其中第一个参数指定一个唯一的名称、一般建议用快手工具里的GUID工具生成一个GUID以保证其唯一性。 不同线程、或不同进程中使用相同的名称就可以打开同一个事件对象( thread.event对象不但可以跨线程、也可以跨进程使用 )使用 event.conflict 属性可以判断其他线程或进程是否打开了该事件对象。

thread.event有三个构造参数,如下:

var event = thread.event(\事件唯一名称\,是否手动复原信号,初始状态)

参数2、参数3都是可选参数,默认都是false.

初始状态为false表示初始化为无信号状态, 如果手动复原信号为false表示自动复原信号,也就是每次放行线程以后自动重置为无信号状成。

如果把event比作交通信号灯,那么无信号状态类似红灯表示禁止通行,而有信号状态类似绿灯表示放行等待的线程,几个关键的函数:

源代码 [ AAuto ]

001 import thread.event;

002 var event = thread.event(\交通信号灯\

003

004 event.reset(); //重置为无线号状态、类似于切换为红灯

005 event.set();//切换为有线号状态、类似于切换为绿灯

006 event.wait(); //阻塞线程、并等待信号变为绿灯

007 //如果不是手动复原的事件对象、执行到这里会自动复原为无信号状态(绿灯)

源代码 [ AAuto ]

001 io.open()

002

003 thread.create(

004 function(){

005 import thread.event;

006 var event = thread.event(\交通信号灯\

007

008 event.wait();

009 io.print(\汽车1 过了\

010 }

011 )

012

013 thread.create(

014 function(){

015 import thread.event;

016 var event = thread.event(\交通信号灯\

017

018 event.wait();

019 io.print(\汽车2 过了\

020 }

021 )

022

023 thread.create(

024 function(){

025 import thread.event;

026 var event = thread.event(\交通信号灯\

027

028 event.wait();

029 io.print(\汽车3 过了\

030 }

031 )

032

033 //给一点时间让所有线程进入等待状态

034 sleep(100)

035

036 import thread.event;

037 var event = thread.event(\交通信号灯\

038 event.set(); //切换为绿灯

执行上面的代码以后,你会发现只有一部汽车过了(线程是并发执行的,所以可能是任意一部汽车先过),这是为什么呢?

thread.event的二个构造参数如果为false(默认就是这个值)那么创建的事件对象是自动复原信号的,当一个等待的线程被放行以后,该对象会立即自动切换为无信号状态( 用上面的示例来讲:就是绿灯放行一部车子就立即变为绿灯,一次只能过一部车子)

如果要一次放行所有等待的线程,那就要做如下修改,使事件对象使用手动复原机制,示例如下: 源代码 [ AAuto ]

001 import thread.event;

002 var event = thread.event(\交通信号灯22\手动复原*/)

003

004 thread.create(

005 function(){

006 import thread.event;

007 var event = thread.event(\交通信号灯22\

008

009 event.wait();

010 io.print(\汽车1 过了\

011 }

012 )

013

014 thread.create(

015 function(){

016 import thread.event;

017 var event = thread.event(\交通信号灯22\

018

019 event.wait();

020 io.print(\汽车2 过了\

021 }

022 )

023

024 thread.create(

025 function(){

026 import thread.event;

027 var event = thread.event(\交通信号灯22\

028

搜索更多关于: 快手AAUTE多线程中的交通信号灯 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

多线程中的交通信号灯:thread.event 标准库中的 thread.event 用于创建线程事件对象, 该对象类似于多线程中的交通信号灯、实现红绿灯机制实现多线程之间的同步协作。 创建 thread.event 对象的代码如下: 源代码 [ AAuto ] 001 import thread.event; 002 var event = thread.event(\交通信号灯\ 其中第一个参数指定一个唯一的名称、一般建议用快手工具里的GUID工具生成一个GUID以保证其唯一性。 不同线程、或不同进程中使用相同的名称就可以打开同一个事件对象( thread.event对象不但可以跨线程、也可以跨进程使用 )使用 event.conflict

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com