C# 多线程交替按照指定顺序执行

这篇具有很好参考价值的文章主要介绍了C# 多线程交替按照指定顺序执行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.关于AutoResetEvent和ManualResetEvent的区别解释如下:

AutoResetEvent和ManualResetEvent是.NET中的两个线程同步类。它们之间的主要区别在于其释放信号的方式以及对等待线程的影响。

AutoResetEvent的作用是在等待的线程被信号唤醒后,将信号自动重置为非终止状态。也就是说,当一个线程等待一个AutoResetEvent对象时,一旦它收到信号并被唤醒,AutoResetEvent对象会自动将自身状态重置为非终止状态,以便其他线程可以继续等待。这样,只有一个线程能够通过AutoResetEvent对象,其他线程需要重新等待信号。

而对于ManualResetEvent,一旦一个线程等待一个ManualResetEvent对象并收到信号唤醒后,ManualResetEvent对象不会自动重置为非终止状态。也就是说,ManualResetEvent对象会维持其终止状态,直到调用Reset()方法将其重置为非终止状态才能再次触发等待的线程。这意味着多个线程可以同时通过ManualResetEvent对象,并且不需要重新等待信号。

因此,AutoResetEvent和ManualResetEvent的主要区别在于对等待线程的影响。AutoResetEvent只允许一个线程通过,并且在线程收到信号后自动重置为非终止状态,而ManualResetEvent允许多个线程通过,并且在等待线程收到信号后,保持其终止状态直至调用Reset()方法将其重置为非终止状态。

总结:AutoResetEvent不需要Reset()方法(唤醒后自动调用),而ManualResetEvent需用用户手动触发。

多个线程按照顺序执行案例如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
     
        public Form1()
        {
            InitializeComponent();
         
        }
        AutoResetEvent A = new AutoResetEvent(false); //实例化阻塞事件
        AutoResetEvent B = new AutoResetEvent(false); //实例化阻塞事件
        AutoResetEvent C = new AutoResetEvent(false); //实例化阻塞事件
        private void button1_Click(object sender, EventArgs e)
        {
            A.Set();
            Task.Run(() =>
            {
                AA();
            });
            Task.Run(() =>
            {
                BB();
            });
            Task.Run(() =>
            {
                CC();
            });
        }

        private void AA()
        {
            for (int i = 0; i < 10; i++)
            {
                A.WaitOne();//等待信号
                Console.WriteLine("A");
                B.Set();
            }
        }
        private void BB()
        {
            for (int i = 0; i < 10; i++)
            {
                B.WaitOne();
                Console.WriteLine("B");
                C.Set();
            }
        }
        private void CC()
        {
            for (int i = 0; i < 10; i++)
            {
                C.WaitOne();
                Console.WriteLine("C");
                A.Set();
            }
        }
    }
}

执行结果:依次按照顺序输出abc。

 

C# 多线程交替按照指定顺序执行,多线程的应用,开发语言,c#文章来源地址https://www.toymoban.com/news/detail-681896.html

到了这里,关于C# 多线程交替按照指定顺序执行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解高并发编程 - 线程的执行顺序

    在Java中,线程的执行顺序是由操作系统的调度机制决定的,具体顺序是不确定的,取决于多个因素,如操作系统的调度策略、线程的优先级、线程的状态转换等。因此,不能对线程的执行顺序做出可靠的假设。 以下是一个简单的Java代码示例,演示了多个线程的执行顺序是不

    2024年02月14日
    浏览(52)
  • 【业务功能篇91】微服务-springcloud-多线程-线程池执行顺序

    1.1 继承Thread 1.2 实现Runnable接口 1.3 Callable接口   上面的三种获取线程的方法是直接获取,没有对线程做相关的管理,这时可以通过线程池来更加高效的管理线程对象。 然后我们就可以通过这个线程池对象来获取对应的线程   通过上面的介绍我们发现获取线程的方式 继承

    2024年02月10日
    浏览(53)
  • 如何保证三个线程按顺序执行?不会我教你

    👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金、infoQ、51CTO等 🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计 15w+   ;硬核微信公众号「猿圈奇妙屋」,欢迎你的

    2024年02月07日
    浏览(44)
  • 【昕宝爸爸小模块】如何让Java的线程池顺序执行任务

    ➡️博客首页       https://blog.csdn.net/Java_Yangxiaoyuan        欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。        本文章CSDN首发,欢迎转载,要注明出处哦!        先感谢优秀的你能认真的看完本文,有问题欢迎评论区交流,都会认真回复! Java中的线程池

    2024年01月16日
    浏览(44)
  • kafka Consumer 消费者使用多线程并发执行,并保证顺序消费, 第一种使用纯线程方式、第二种使用Executors线程池

    网上搜索kafka消费者通过多线程进行顺序消费的内容都不太理想,或者太过复杂,所以自己写了几个demo,供大家参考指正。         单个消费者,每秒需要处理1000条数据,每条数据的处理时间为500ms,相同accNum(客户账号)的数据需要保证消费的顺序。 1、如果1秒钟生产

    2024年02月15日
    浏览(42)
  • C#多线程,事件,延迟执行的方法

    1.通过直接调用另一个事件的处理程序来触发该事件。以下是一个示例代码: 在上述代码中,当按钮的Click事件被触发时,它会调用OnButtonClick方法。在该方法中,通过调用OnOtherEvent方法来触发另一个事件,并将同样的sender和e参数传递给它。然后,在OnOtherEvent方法中处理另一个

    2024年02月05日
    浏览(28)
  • OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列

    在OpenCV中,读取的图片默认是HWC格式,即按照高度、宽度和通道数的顺序排列图像尺寸的格式。我们看最后一个维度是C,因此最小颗粒度是C。 例如,一张形状为256×256×3的RGB图像,在OpenCV中读取后的格式为[256, 256, 3],其中最后一个维度表示图像的通道数。在OpenCV中,可以通

    2024年02月04日
    浏览(38)
  • 【算法】两个线程交替打印0~100的数

    总结:条件变量相比于条件判断更加繁琐,但是使用条件变量对于CPU的占用更低,如果是执行更繁杂的多线程任务,使用条件变量效率更高。

    2024年02月14日
    浏览(33)
  • 多线程知识:三个线程如何交替打印ABC循环100次

    本文博主给大家讲解一道网上非常经典的多线程面试题目。关于三个线程如何交替打印ABC循环100次的问题。 下文实现代码都基于Java代码在单个JVM内实现。 给定三个线程,分别命名为A、B、C,要求这三个线程按照顺序交替打印ABC,每个字母打印100次,最终输出结果为: 推荐博

    2024年02月12日
    浏览(93)
  • 【Java多线程】交替打印奇偶数

    需求 使用一个线程对一个数进行循环自增,并且使用另外两个线程对当前的数进行打印,一个线程打印奇数,一个线程打印偶数,要求最终输出结果必须按顺序打印出来 代码 先定义全局变量 指定三个线程: 线程一:对一个整型数(i50)进行递增 线程二:打印奇数; 线程三

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包