返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++的mutex怎么用
  • 771
分享到

c++的mutex怎么用

2023-06-19 10:06:30 771人浏览 独家记忆
摘要

本篇内容介绍了“c++的mutex怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面临的问题多线程同时操作一段数据时,线程调度由操作系统

本篇内容介绍了“c++的mutex怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

面临的问题

多线程同时操作一段数据时,线程调度由操作系统控制,在机器码层次进行,所以访问同一数据的多个任务(线程)的代码随机交替执行,从而导致任务(线程)间数据交换不能正常进行。

解决问题的方式

问题搞清楚以后,对策当然就是保证每个线程内操作数据的处理的完整性。但是C/C++中达成这个目标的手段不是将数据保护起来,而是限制操作数据的代码的同时执行。具体说,就是在开始执行操作数据的代码之前先通过mutex::lock方法定互斥量,然后执行对数据进行操作的代码。数据操作代码执行完了之后,再通过mutex::unlock释放互斥量。在互斥量的锁定期间其他线程无法锁定信号量。

由于操作系统可以保证同一时刻只有一个线程可以锁定成功,所以只要程序在所有操作同一数据的代码之前都有锁定互斥量的动作,结果上就可以保证同一时刻只有一段操作数据的代码可以执行,而不被其他操作改数据的代码打断。这样就间接保证了数据的完整性。

注意事项

根据上面的描述,可以知道,使用Mutex进行数据交互必须遵循以下原则:

  1. 所有操作数据的代码在执行之前必须首先尝试锁定同一个互斥量

  2. 只有在互斥量锁定成功的情况下才允许执行操作数据的代码

  3. 操作数据的代码执行以后,必须释放互斥量

如果在操作数据之前没有锁定互斥量的过程,或者锁定的是不同的互斥量,无论哪一种情况都达成不了同一时刻,只有一段代码执行的目标。

如果操作数据的代码执行之后没有释放互斥量,后续处理数据的代码将永远不能锁定互斥量,也就是说,后续的数据处理不能继续执行。

请按照上述原则在审视一下代码,主要关注mutex:

QMutex mutex;    
//define CreateDataTask class.
class CreateDataTask : public Qthread
{
public:
   CreateDataTask(QMutex& mutex)
       :m_mutex(mutex)
  {
  }
private:
   QMutex& m_mutex;
   void run()
   {
       for(int i = 0; i < 10; ++i)
       {
           m_mutex.lock();
           cout << "WT:<<<<WriteData:" << i  
                             << "<<<<" << endl;
           WriteData();
           m_mutex.unlock();
       }
   }
};

::timeBeginPeriod(1);
//Create thread object of CreateDataTask.
CreateDataTask *writer = new CreateDataTask(mutex);
//Start Thread.
writer->start(QThread::NORMalPriority);
for(int i = 0; i < 10; ++i)
{
   mutex.lock();
   cout << "RT:>>>>ReadData:" << i
                      << ">>>>" << endl;
   ReadData();
   data_array.clearData();
   mutex.unlock();
}

timeEndPeriod(1);

应该讲点原则

有一种说法,飞机是试飞员飞出来的,估计也会有很多人说,程序是程序员Debug出来的。这种观点作者实在是不敢苟同。多任务编程就是一个不能靠调试解决问题的例子。必须遵循上面的原则,否则的话程序的动作会有很大的不确定性。在开发的最后阶段,多任务相关的问题都会占有相当大的比例。那简直就是程序员的噩梦。

“c++的mutex怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: c++的mutex怎么用

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

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

猜你喜欢
  • c++的mutex怎么用
    本篇内容介绍了“c++的mutex怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面临的问题多线程同时操作一段数据时,线程调度由操作系统...
    99+
    2023-06-19
  • C# Mutex对象怎么使用
    本篇内容主要讲解“C# Mutex对象怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C# Mutex对象怎么使用”吧!如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对...
    99+
    2023-06-17
  • c#的互斥锁Mutex类怎么使用
    本篇内容主要讲解“c#的互斥锁Mutex类怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c#的互斥锁Mutex类怎么使用”吧!什么是Mutex“mutex”是术语“互相排斥(mutual...
    99+
    2023-06-29
  • C#多线程中的互斥锁Mutex怎么用
    本篇内容主要讲解“C#多线程中的互斥锁Mutex怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#多线程中的互斥锁Mutex怎么用”吧!一、简介Mutex的突出特点是可以跨应用程序域边界对...
    99+
    2023-06-30
  • Golang中的Mutex怎么使用
    本篇内容介绍了“Golang中的Mutex怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mutex基本概念Mutex 是 Go 语言...
    99+
    2023-07-05
  • c#中monitor与mutex的区别是什么
    在C#中,Monitor和Mutex都是用来控制并发访问的机制,但它们有一些区别: Mutex是一个系统级别的同步对象,而Mon...
    99+
    2024-03-15
    c#
  • C++多线程之使用Mutex的方法是什么
    在C++中使用Mutex(互斥锁)来实现多线程同步的方法如下:1. 包含头文件:首先要包含头文件 ``。2. 创建Mutex对象:使...
    99+
    2023-09-14
    C++
  • c#互斥锁Mutex类用法介绍
    什么是Mutex “mutex”是术语“互相排斥(mutually exclusive)”的简写形式,也就是互斥量。互斥量跟...
    99+
    2024-04-02
  • C++多线程之使用Mutex和Critical_Section
    在C++中,我们可以使用互斥锁(Mutex)和临界区(Critical Section)来实现多线程同步。**Mutex:**互斥锁...
    99+
    2023-09-11
    C++
  • C语言中怎么利用软件代替Mutex互斥锁
    本篇文章给大家分享的是有关C语言中怎么利用软件代替Mutex互斥锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言在 Linux  系统中,当多个线程并行执行时...
    99+
    2023-06-15
  • C#多线程中的互斥锁Mutex
    一、简介 Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。 主要常用的两个方法: publ...
    99+
    2024-04-02
  • C#的进程同步Mutex类使用实例分析
    这篇文章主要介绍“C#的进程同步Mutex类使用实例分析”,在日常操作中,相信很多人在C#的进程同步Mutex类使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#的进程同步Mutex类使用实例分析...
    99+
    2023-06-29
  • linux中mutex任务状态怎么查看
    在Linux中查看mutex任务状态可以通过以下几种方式: 使用命令行工具:可以使用命令行工具如top、htop或ps来查看当前...
    99+
    2024-03-15
    linux
  • 初识Golang Mutex互斥锁的使用
    目录前言为什么要使用互斥锁如何使用互斥锁使用方式一:直接声明使用使用方式二:封装在其他结构体中互斥锁的常见问题前言 在学习操作系统的时候,我们应该都学习过临界区、互斥锁这些概念,用于...
    99+
    2024-04-02
  • C语言中如何利用软件代替Mutex互斥锁
    今天小编给大家分享一下C语言中如何利用软件代替Mutex互斥锁的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言在 Li...
    99+
    2023-06-17
  • 怎么诊断SQL中library cache: mutex X等待
    这篇文章主要介绍“怎么诊断SQL中library cache: mutex X等待”,在日常操作中,相信很多人在怎么诊断SQL中library cache: mutex X等待问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • linux中mutex的底层原理是什么
    在Linux中,mutex的底层原理主要是基于原子操作和内核态的同步机制来实现的。 具体来说,Linux中的mutex通常是通过sp...
    99+
    2024-03-15
    linux
  • golang pprof监控memory block mutex使用的方法是什么
    这篇文章主要介绍“golang pprof监控memory block mutex使用的方法是什么”,在日常操作中,相信很多人在golang pprof监控memory block ...
    99+
    2023-07-05
  • GO语言协程互斥锁Mutex和读写锁RWMutex怎么用
    本文小编为大家详细介绍“GO语言协程互斥锁Mutex和读写锁RWMutex怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“GO语言协程互斥锁Mutex和读写锁RWMutex怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • Go语言互斥锁Mutex和读写锁RWMutex的用法
    这篇文章主要介绍“Go语言互斥锁Mutex和读写锁RWMutex的用法”,在日常操作中,相信很多人在Go语言互斥锁Mutex和读写锁RWMutex的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作