广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#多线程中的互斥锁Mutex
  • 655
分享到

C#多线程中的互斥锁Mutex

2024-04-02 19:04:59 655人浏览 泡泡鱼
摘要

一、简介 Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。 主要常用的两个方法: publ

一、简介

Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。

主要常用的两个方法:

  • public virtual bool WaitOne() 阻止当前线程,直到当前 System.Threading.WaitHandle 收到信号获取互斥
  • public void ReleaseMutex() 释放 System.Threading.Mutex 一次。

二、代码

案例一:

    class Program
    {
        private static Mutex mutex = new Mutex();
        static void Main(string[] args)
        {
            Thread[] thread = new Thread[3];
            for (int i = 0; i < 3; i++)
            {
                thread[i] = new Thread(ThreadMethod1);//方法引用
                thread[i].Name = "Thread-" + (i+1).ToString();
            }
            for (int i = 0; i < 3; i++)
            {
                thread[i].Start();
            }
            Console.ReadKey();
        }
        public static void ThreadMethod1(object val)
        {           
            mutex.WaitOne();    //获取锁
            for (int i = 1; i <=5; i++)
            {
                Console.WriteLine("{0}循環了{1}次", Thread.CurrentThread.Name, i);
            }
            mutex.ReleaseMutex();  //释放锁
        }
    }

运行结果:

案例二:

    class Program
    {
        private static Mutex mutex = new Mutex();
        private static int sum = 0;
        static void Main(string[] args)
        {
            Task<int> task = new Task<int>(ThreadFunction);
            task.Start();
            Console.WriteLine($"{DateTime.Now} task started!");
            Thread.Sleep(2000);//Main主線程

            Console.WriteLine($"{DateTime.Now} Get siginal in Main!");
            mutex.WaitOne();
            Console.WriteLine($"{DateTime.Now} Get siginal in main!");

            Console.WriteLine($"{DateTime.Now} Result is {task.Result}");
            Console.ReadKey();
        }
        private static int ThreadFunction()
        {
            Console.WriteLine($"{DateTime.Now} Get siginal in ThreadFunction!");
            mutex.WaitOne();  //获取锁
            for (int i = 0; i <= 10; i++)
            {
                sum += i;
                Thread.Sleep(1000);
            }
            Console.WriteLine($"{DateTime.Now} Release mutex in ThreadFunction!");
            mutex.ReleaseMutex();  //释放锁

            return sum;
        }
    }

运行结果:

三、总结

为避免发送多线程发生死锁,Mutex的WaitOne()和ReleaseMutex()需成对配合使用。

到此这篇关于C#互斥锁Mutex的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#多线程中的互斥锁Mutex

本文链接: https://www.lsjlt.com/news/146580.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#多线程中的互斥锁Mutex
    一、简介 Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。 主要常用的两个方法: publ...
    99+
    2022-11-13
  • C#多线程中的互斥锁Mutex怎么用
    本篇内容主要讲解“C#多线程中的互斥锁Mutex怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#多线程中的互斥锁Mutex怎么用”吧!一、简介Mutex的突出特点是可以跨应用程序域边界对...
    99+
    2023-06-30
  • C++ 多线程之互斥量(mutex)详解
    目录std::mutexstd::recursive_mutexstd::time_mutexstd::recursive_timed_mutexstd::shared_mutexs...
    99+
    2022-11-13
  • C++多线程之互斥锁与死锁
    目录1.前言2.互斥锁2.1 互斥锁的特点2.2 互斥锁的使用2.3 std::lock_guard3.死锁3.1 死锁的含义3.2 死锁的例子3.3 死锁的解决方法1.前言 比如说...
    99+
    2022-11-12
  • c#的互斥锁Mutex类怎么使用
    本篇内容主要讲解“c#的互斥锁Mutex类怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c#的互斥锁Mutex类怎么使用”吧!什么是Mutex“mutex”是术语“互相排斥(mutual...
    99+
    2023-06-29
  • python多线程互斥锁与死锁
    目录一、多线程间的资源竞争二、互斥锁1.互斥锁示例2.可重入锁与不可重入锁三、死锁一、多线程间的资源竞争 以下列task1(),task2()两个函数为例,分别将对全局变量num加一...
    99+
    2022-11-13
  • GoLang中的互斥锁Mutex和读写锁RWMutex使用教程
    目录一、竞态条件与临界区和同步工具(1)竞态条件(2)临界区(3)同步工具二、互斥量三、使用互斥锁的注意事项(1)使用互斥锁的注意事项(2)使用defer语句解锁(3)sync.Mu...
    99+
    2023-01-09
    Go Mutex和RWMutex Go Mutex GoLang RWMutex
  • C++多线程互斥锁和条件变量的详解
    目录互斥锁:std::mutex::try_lock         条件变量:condition_variable总结我们了解互斥...
    99+
    2022-11-13
  • C语言中怎么利用软件代替Mutex互斥锁
    本篇文章给大家分享的是有关C语言中怎么利用软件代替Mutex互斥锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言在 Linux  系统中,当多个线程并行执行时...
    99+
    2023-06-15
  • C语言中如何利用软件代替Mutex互斥锁
    今天小编给大家分享一下C语言中如何利用软件代替Mutex互斥锁的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言在 Li...
    99+
    2023-06-17
  • python多线程中互斥锁与死锁的示例分析
    小编给大家分享一下python多线程中互斥锁与死锁的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、多线程间的资源竞争以下列task1(),task2()两个函数为例,分别将对全局变量num加一重复一千万次循环(...
    99+
    2023-06-29
  • Linux多线程中fork与互斥锁过程示例
    目录问题提出:(一)初次尝试(二)理性分析(三)解决问题(1)使用pthread_join()(2)使用phread_atfork()注册一个fork之前的判断问题提出: 我们有这样一个问题:在一个多线程程序中创建子进程...
    99+
    2022-06-04
    Linux多线程fork linux互斥锁过程
  • python多线程互斥锁与死锁问题详解
    目录一、多线程共享全局变量二、给线程加一把锁锁三、死锁问题总结一、多线程共享全局变量 代码实现的功能: 创建work01与worker02函数,对全局变量进行加一操作创建main函数...
    99+
    2022-11-13
  • C++详解多线程中的线程同步与互斥量
    目录线程同步互斥量线程同步 #include <stdio.h> #include <pthread.h> #include <unistd.h>...
    99+
    2022-11-13
  • Linux线程互斥锁的概念
    本篇内容介绍了“Linux线程互斥锁的概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在编程中,引入了对象互斥锁的概念,来保证共享数据操作...
    99+
    2023-06-15
  • Python互斥锁怎么解决多线程问题
    这篇文章给大家分享的是有关Python互斥锁怎么解决多线程问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均...
    99+
    2023-06-14
  • C++多线程中的线程同步与互斥量实例分析
    本篇内容介绍了“C++多线程中的线程同步与互斥量实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程同步#include &...
    99+
    2023-06-30
  • Linux中线程互斥锁的示例分析
    小编给大家分享一下Linux中线程互斥锁的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个...
    99+
    2023-06-28
  • 一文掌握Go语言并发编程必备的Mutex互斥锁
    目录1. Mutex 互斥锁的基本概念2. Mutex 互斥锁的基本用法3. Mutex 互斥锁的底层实现3.1 等待队列3.2 锁状态4. Mutex 互斥锁的注意事项4.1 不要...
    99+
    2023-05-18
    Go语言 Mutex互斥锁 Go语言 Mutex Go Mutex互斥锁
  • 浅谈c++11线程的互斥量
    目录为什么需要互斥量独占互斥量std::mutex原子操作为什么需要互斥量 在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作