AutoResetEvent双向信号(生产者和消费者)例子

news/2024/10/19 9:31:54

AutoResetEvent是一个非常有用的线程同步机制,尤其是在处理生产者和消费者问题的时候,尤其适用。本随笔记录下生产者和消费者一对一问题的两种写法并进行代码执行逻辑的分析,来加深对AutoResetEvent的理解。

写法一:

internal class Program
{public static AutoResetEvent _product = new AutoResetEvent(false);public static AutoResetEvent _customer = new AutoResetEvent(false);static string _message = string.Empty;static void Main(string[] args){Thread Product = new Thread(ProductItems);Thread Consume = new Thread(ConsumeItems);Product.Start();Consume.Start();Product.Join();Consume.Join();Console.WriteLine("finish");Console.Read();}static void ProductItems(){for (int i = 0; i < 5; i++){_product.WaitOne();_message = $"~:{i}";Console.WriteLine("生产:" + _message);_customer.Set();}}static void ConsumeItems(){for (int i = 0; i < 5; i++){_product.Set();_customer.WaitOne();Console.WriteLine("消费:" + _message);}}
}

执行结果:

 写法二:

 internal class Program{public static AutoResetEvent _product = new AutoResetEvent(false);public static AutoResetEvent _customer = new AutoResetEvent(true);static string _message = string.Empty;static void Main(string[] args){Thread Product = new Thread(ProductItems);Thread Consume = new Thread(ConsumeItems);Product.Start();Consume.Start();Product.Join();Consume.Join();Console.WriteLine("finish");Console.Read();}static void ProductItems(){for (int i = 0; i < 5; i++){_customer.WaitOne();_message = $"~:{i}";Console.WriteLine("生产1:" + _message);_product.Set();}}static void ConsumeItems(){for (int i = 0; i < 5; i++){_product.WaitOne();Console.WriteLine("消费1:" + _message);_customer.Set();}}}

运行结果:

 要点:

其一:AutoResetEvent(true)和AutoResetEvent(fasle);两者的区别是前者初始化时就有一个票据,相当于在运行AutoResetEvent(fasle)后,直接调用了set方法。

其二:程序要继续往下运行的条件为:1.必须有票据。2.必须在等待(当然如果没有等待就无所谓生产者和消费者协调问题了,不在本文范围内),两者的顺序可以有先有后,无所谓谁前谁后。

其三:等待句柄对操作系统的负载并不高。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

数据采集和融合技术作业1

作业① 1)用requests和BeautifulSoup库方法定向爬取给定网址的数据,屏幕打印爬取的大学排名信息。 a、主要代码解析 该函数从获取的JSON数据中提取前 num 名大学的信息,并将这些信息存储到 ulist 列表中,同时格式化输出这些大学的排名信息 def printUnivList(ulist, html, …

沃顿商学院商业人工智能笔记-六-

沃顿商学院商业人工智能笔记(六) P46:12_简介.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 嗨,我是迈克尔罗伯茨。我是威廉H罗伯茨教授。 我是宾夕法尼亚大学沃顿商学院的金融学劳伦斯教授。 在这一系列视频中,我们将讨论金融、机器学习。以及人工智能。因此,当我想到金…

沃顿商学院商业人工智能笔记-九-

沃顿商学院商业人工智能笔记(九) P82:19_更广泛的隐私和伦理问题.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 所以让我们讨论一下关于使用数据科学和人工智能的一些更广泛的问题。一般来说,在工作场所管理人际关系。这些是伦理问题,也是隐私问题。 所以让我们谈谈这些问…

沃顿商学院商业人工智能笔记-三-

沃顿商学院商业人工智能笔记(三) P123:22_AI的风险.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 在这次讲座中,我们将讨论AI的一些风险。我将以一个简单的统计风险开始,它有重要的管理意义。 然后我会谈论社会和伦理风险。 所以我想讨论的第一个风险是过拟合风险。 现在,…

沃顿商学院全套笔记-三十三-

沃顿商学院全套笔记(三十三) 沃顿商学院《实现个人和职业成功(成功、沟通能力、影响力)|Achieving Personal and Professional Success》中英字幕 - P8:7_成功的两面.zh_en - GPT中英字幕课程资源 - BV1VH4y1J7Zk When you unpack the word success for the first time,…

沃顿商学院全套笔记-三十二-

沃顿商学院全套笔记(三十二) 沃顿商学院《实现个人和职业成功(成功、沟通能力、影响力)|Achieving Personal and Professional Success》中英字幕 - P68:4_从德梅洛获取的启示.zh_en - GPT中英字幕课程资源 - BV1VH4y1J7Zk What can we learn about power and influence …

沃顿商学院全套笔记-三十-

沃顿商学院全套笔记(三十) 沃顿商学院《实现个人和职业成功(成功、沟通能力、影响力)|Achieving Personal and Professional Success》中英字幕 - P37:9_建立信任-脆弱性.zh_en - GPT中英字幕课程资源 - BV1VH4y1J7Zk We often think that once we trust somebody, we c…

10.18 %你赛总结

10.18 日模拟赛总结 T1 一维围棋 思路 由于本人太蒟了,不会 \(O(n)\)。求教。 简单题目。首先,看到数据范围 \(|s| \le 100\),于是得到可以有 \(O(n^4)\) 做法。先 \(O(n)\) 枚举 \(s_i\) 对于是 . 的位置变成 W。然后 \(O(n^2)\) 枚举修改后的数组的每个子串,对于 \([l,r]…