关于“Mutex”学习、

互斥锁(Mutex)

互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。

互斥锁可适用于一个共享资源每次只能被一个线程访问的情况

当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。

Mutex是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。

按我的理解就是说:很多人排队到一台ATM取款、必须要等到第一个人取完以后、第二个人才能使用、这样依次类推。

献上使用代码:

        public void AutomaticSubmitProcess(int MaxQueueStep,string System)
        {
            bool bCreateNew = false;
            Mutex mut = new Mutex(true, "name", out bCreateNew);
            //使用一个指示调用线程是否应拥有互斥体的初始所属权的布尔值、
            //一个作为互斥体名称的字符串,
            //以及一个在方法返回时指示调用线程是否被授予互斥体的初始所属权的布尔值来初始化 Mutex 类的新实例。
            if (bCreateNew == false)
            {
                // 说明有人正在ATM取钱、请排队。
                Console.WriteLine("Another Instance is running!");
                return;
            }
            //现在可以在ATM取钱了、

            DataSet ds = alc.GetProcessOperationQueue(MaxQueueStep, "UBI");
            if (ds.Tables[0].Rows.Count > 0)
            {
                //涉及项目,就不贴出数据修改了、谅解
            }
            mut.ReleaseMutex();//释放 Mutex 一次。
            mut.Close();
            mut.Dispose();
        }

第一次使用、仅发表我的理解、如果说错了、希望提出修改、

时间: 2024-08-14 23:26:38

关于“Mutex”学习、的相关文章

C++11多线程——mutex学习

Mutex也称之为互斥量,C++11中与mutex相关的类与函数声明都在<mutex>头文件中. 一<mutex>头文件内容简介: Classes 1.1 Mutexes mutex                               mutexclass(class) recursive_mutex                 Recursivemutex class(class) time_mutex                          Timedmu

c++11多线程学习笔记之二 mutex使用

// 1111111.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <thread> #include <mutex> int gcounter = 0; std::mutex gmtx; std::mutex gmtxOutput; void Increases() { for (int i = 0; i<10000; ++i) { if (g

go语言sync包的学习(Mutex、WaitGroup、Cond)

package main; import ( "fmt" "sync" "runtime" "time" ) //加锁,注意锁要以指针的形式传进来,不然只是拷贝 func total1(num *int, mu *sync.Mutex, ch chan bool) { mu.Lock(); for i := 0; i < 1000; i++ { *num += i; } ch <- true; mu.Unlock(

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

FFmpeg学习5:多线程播放视音频

在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习的代码进行了重构,便于后面的扩展.本文主要有以下几个方面的内容: 多线程播放视音频的整体流程 多线程队列 音频播放 视频播放 总结以及后续的计划 1. 整体流程 FFmpeg和SDL的初始化过程这里不再赘述.整个流程如下: 对于一个打开的视频文件(也就是取得其AVFormatContext),创建一个

ucos实时操作系统学习笔记——任务间通信(信号量)

ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代码的学习心得,供以后回来看看,不过比较遗憾的是没有仔细学习扩展代码的功能实现部分.ucos操作系统的内核代码实现相对简单,但是对理解其他操作系统内核相同功能有帮助. ucos的任务间通信机制主要是基于event实现的,其实理解这个event不用翻译成中文事件,就叫event感觉还更容易接收.下面是操

翻出当年的学习进度汇报邮件——前路不易,且行且珍惜

离回归程序猿行列已经一年又一个月整了,也就是进入现在这家公司已经一年又一个月整.确实是个整数,清清楚楚的记得去年入职时间是3月27日,似乎冥冥中总有那么些凑巧的事情发生.现在的公司是一家创业型公司,接受过一轮风投,从创办至今,时间其实不算短.今年是公司非常关键的一年,总觉得年初至今的项目目标不够明确,甚至有点杂乱.作为一个开发人员兼中层管理,最近这段时间想的比较多.可能由于上个月拼死拼活做的项目因为找不到盈利模式被迫暂停的缘故,最近几个星期尤为浮躁,很难静下心来看书学习. 今天下午一时兴起开始整

linux和android端的pthread学习

本文起初主要想写个演示样例实測下pthread_mutex_lock和pthread_mutex_trylock差别.在linux机器上非常快就over了,可是想了一下.pthread是unix系的,在windows没办法直接执行代码非常不方便.于是想到了android,windows上安装ndk,手机root就能够跑pthread代码咯... demo lock和trylock的差别也非常好理解:,前者是堵塞的.死等知道相互排斥锁被释放:而后者则更加灵活.浅尝辄止.做个尝试不行则干其它事情去.

C#多线程学习(六) 互斥对象

C#多线程学习(六) 互斥对象 如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先等车,然后上车,最后下车.当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车.而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mute