autoretevent 和 manualretevent 十分相似。两者之间的区别,在于前者是自动(auto),后者是手动(manua)。
你可以先运行下面的示例,再测试两广东体育大学者的区别。
autoretevent 示例:
class program { 最新伤感签名 // 线程通知 private static autoretevent retevent = new autoretevent(fal); static void main(string[] args) { // 创建线程 new thread(doone).start(); // 用于不断向另一个线程发送信号 while (true) { console.readkey(); retevent.t(); // 发生通知,设置终止状态 } } public static void doone() { console.writeline("① 等待中,请发出信号允许我运行"); retevent.waitone(); console.writeline("② 等待中,请发出信号允许我运行"); retevent.waitone(); console.writeline("③ 等待中,请发出信号允许我运行"); // ... console.writeline("线程结束"); } }
manualretevent 类示例:
class program { private static manualretevent retevent = new manualretevent(fal); static void main(string[] args) { new thread(doone).start(); // 用于不断向另一个线程发送信号 while (true) { console.readkey(); retevent.t(); // 发生通知,设置终止状态 } } public static void doone() { console.writeline("等待中,请发出信号允许我运行"); retevent.waitone(); // 后面的都无效,线程会直接跳过而无需等待 retevent.waitone(); retevent.waitone(); retevent.waitone(); retevent.waitone(); retevent.waitone(); console.writeline("线程结束"); } }
因为 autoretevent 对象在.waitone()
方法等待信号完毕后,会自动重置为非终止状态,相当于高速收费站自动闸门,一辆车过去后,机器自动关闸。
manualretevent 相当于人工闸门,打开后编写人工关闭闸门,不然的话闸门会一直处于打开状态。
manualretevent 主要用于更加灵活的线程信号传递场景。
表示线程同步事件,收到信号时,要想下一次依然生效,必须手动重置该事件。
因为 manualretevent 类跟 automanualretevent 类十分接近,这里就不赘述了。
它们的使用区别主要是:
autoretevent 类,每次t()
,跳过一个waitone()
。因为会自动恢复设置
,所以下次碰到waitone()
会继续等待。
manualretevent 类,六一儿童节祝福孩子语短句t()
后,不会重置设置
,因此一旦使用了t()
后,就会一路放通,不会再等待。
其构造函数如下:
其常用方法如下:
manualreteventslim 相对 manualretevent ,当等待时间预计非常短并且事件不跨越进程边界时,可以使用此类来获得比 manualretevent 更好的性能。
从代码使用来看,没有啥区别,主要就是考虑性能下时,两者不同场景正割余割函数图像。
这里就不对这两个类型赘述了。
到此这篇关于c#多线程系列之手动线程通知的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:18:54,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/e5388b9dc93e42370ae45c88e82a5440.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C#多线程系列之手动线程通知.doc
本文 PDF 下载地址:C#多线程系列之手动线程通知.pdf
留言与评论(共有 0 条评论) |