• 2024-07-04【Linux】多线程(互斥 && 同步)
    我们在上一节多线程提到没有任何保护措施的抢票是会造成数据不一致的问题的。那我们怎么办?答案就是进行加锁。目录加锁:认识锁和接口:初始化:加锁&&解锁:全局的方式:局部的方式:原理角度理解:实现角度理解:同步:加锁:认识锁和接口:初始化:这个就是我们互斥锁的类型。
  • 2024-07-03IO线程-同步、互斥、条件变量
    1.同步1.1概念同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情(异步:异步则反之,并非一定需要一件事做完再做另一件事。)1.2同步机制通过信号量实现线程间同步。信号量:通过信号量实现同步操作;由信号量来决定线程是继续运行还是阻塞等待.信
  • 2024-07-01【嵌入式Linux】<总览> 多线程(更新中)
    文章目录前言一、多线程1.概述2.创建线程3.线程退出4.线程回收5.线程分离6.线程取消7.线程的ID比较二、线程同步1.概述2.互斥锁3.死锁4.读写锁5.条件变量6.信号量三、线程池前言记录学习多线程的知识重点与难点,若涉及版权问题请联系本人删除!
  • 2024-07-01高编:线程(2)——同步与互斥
    一、互斥概念:   互斥===》在多线程中对临界资源的排他性访问。   互斥机制===》互斥锁 ===》保证临界资源的访问控制。   pthread_mutex_t mutex;   互斥锁类型       互斥锁变量内核对象框架:   定义互斥锁==》初始化锁=
  • 2024-06-30LINUX系统编程:多线程互斥
    目录1.铺垫2.线程锁接口的认识静态锁分配动态锁的分配互斥量的销毁互斥量加锁和解锁3.加锁版抢票4.互斥的底层实现1.铺垫先提一个小场景,有1000张票,现在有4个进程,这四个进程疯狂的去抢这1000张票,看看会发生什么呢?#include<iostream>#include<thread>#include
  • 2024-06-30os实训课程模拟考试(大题复习)
    目录一、Linux操作系统(1)第1关:Linux初体验 (2)第2关:Linux常用命令(3)第3关:Linux查询命令帮助语句二、Linux之进程管理—(重点)(1)第1关:获取进程常见属性(2)第2关:进程创建操作-fork(3)第3关:进程创建操作-vfork(4)第4关:进程终止三、生产者消费者问题实践(1)第1关:生产者消费者问题实践
  • 2024-06-24Go Mutex 流程
    mutex流程typeMutexstruct{stateint32semauint32}等效于typeMutexstruct{lockeduintwokenuintstarvinguintwaiterCountuintsemauint32}Lock流程%%{init:{'flowchart':{'curve':'monoto
  • 2024-06-23【C语言】线程同步
    【C语言】线程同步线程同步1.互斥锁2.读写锁3.条件变量4.信号量最后线程同步  线程同步是指在多线程的情况下,如果多个线程去访问共享资源,需要按照一定规则顺序依次去访问,保证共享资源的数据一致性。1.互斥锁互斥相关函数//互斥量pthread_mutex_tmutex;
  • 2024-06-23线程间通信方式
    1通信机制:互斥与同步线程的互斥通过线程的互斥锁完成;线程的同步通过无名信号量或者条件变量完成。2 互斥2.1何为互斥?       互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不
  • 2024-06-23[Golang并发]Sync.Mutex
    源码//Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.//Packagesyncprovidesbasicsynchronizationprimitivessuchasmutual//exclusionlocks.
  • 2024-06-22读者写者问题(读者优先、公平竞争、写者优先)
    1.读者优先        当有读者进程进行读时,允许多个读者同时读,但不允许写者写;当有写者进程进行写时,不允许其他写者写,也不允许读者读读者算法:p(r_mutex);//申请修改read_countifread_count==0:p(mutex);//获得读文件的权限read_count++;V(r_mutex);阅
  • 2024-06-18C语言队列操作及其安全问题
    在C语言中,队列是一种常用的数据结构,特别适用于嵌入式开发中的任务调度、缓冲区管理等场景。下面是一个简单的循环队列的模板代码,它使用数组来实现队列,并提供了基本的入队(enqueue)和出队(dequeue)操作。示例代码如下:#include<stdio.h>#include<stdbool.h>#include<string.h>
  • 2024-06-15【Linux】生产者消费者模型——阻塞队列BlockQueue
    >作者:დ旧言~>座右铭:松树千年终是朽,槿花一日自为荣。>目标:理解【Linux】生产者消费者模型——阻塞队列BlockQueue。>毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!>专栏选自:Linux初阶>望小伙伴们点赞
  • 2024-06-15Go-知识并发控制mutex
    Go-知识并发控制mutex1.介绍2.数据结构2.1Mutex结构体2.2Mutex方法3.加锁解锁过程3.1简单加锁3.2加锁被阻塞3.3简单解锁3.4解锁并唤醒协程4.自旋过程4.1什么是自旋4.2自旋条件4.3自旋的优势4.4自旋的问题5.Mutex模式5.1Normal模式5.2Starving模
  • 2024-06-14Linux 并发与竞争
    Linux并发与竞争并发与竞争Linux系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。现在的Linux系统并发产生的原因很复杂,总结一下有下面几个主要
  • 2024-06-12【C】线程池实现
    后续会移植为C++版文章目录一、线程池原理二、一些函数2.1pthread_cond_wait()2.2pthread_cond_signal()2.3pthread_create()2.4pthread_exit()三、任务队列定义四、线程池定义五、头文件内容threadpool.h六、.c文件实现6.1threadpool.c文件6.2TestMain测
  • 2024-06-06基于Linux操作系统的生产消费者队列封装(C++)
    一.先前代码及实现(在该篇中会用到)1.基于Linux操作系统的锁的封装-CSDN博客2.基于linux操作系统的线程封装(可实现任意传递任意类型任意个数的参数)-CSDN博客二.生产消费者模型    在一个多线程的进程中,通常存在如下关系生产者和消费者,其中生产者负责生产资源(产生任务
  • 2024-06-05UDP内网穿透和打洞原理的C语言代码实现
    v1.02024年6月5日发布于博客园目录序言UDP打洞的原理应用场景基本理论代码实现udp_client_NAT.cudp_server_NAT.c结果参考链接序言UDP打洞(UDPHolePunching)是一种用于在NAT(网络地址转换)设备后面建立直接P2P(点对点)连接的技术。NAT设备通常会阻止外部设备直接与内部设备通
  • 2024-06-04操作系统·同步问题
    经典同步问题1.生产者消费者问题一组生产者进程(Producer)一组消费者进程(Consumer)共享初始为空大小为n的缓冲区(Buffer)semaphoremutex=1;//mutexsemaphoreempty=n;//buffersemaphorefull=0;//fullProducer(){ while(1){ Produce(); P(m
  • 2024-06-03OPEN_CV多线程线程池管理
    两种自旋锁的设置操作系统级别自旋锁的设置,例如在C++11及以后的版本中,自带线程管理库,可以定义为:defineCV_YIELD()std::this_thread::yield(),此时进入CV_YIELD(),线程释放CPU,线程被阻塞,等待被唤醒.CPU级别的自旋锁的设置,与使用的CPU架构有关,以X86为例,X86
  • 2024-06-01互斥锁与条件变量学习与应用小结
    互斥锁,也叫互斥量。有以下几个显著的特点:唯一性:互斥锁保证在任何给定的时间点,只有一个线程可以获得对临界区资源的访问权。如果一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量。原子性:锁定和解锁互斥锁的操作是原子的,这意味着操作系统(或pthread函
  • 2024-06-01单例模式线程安全reorder问题
    单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。下面是一个使用C++实现的线程安全的单例模式的例子:classSingleton{private:staticstd::atomic<Singleton*>instance;//静态私有实例指针使用原子操作类atomic线程安全sta
  • 2024-06-01Linux系统编程之线程
    一.线程介绍1.进程与线程典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CP
  • 2024-05-31Linux下的并发与竞争
    文章目录前言一、原子操作二、自旋锁三、读写自旋锁四、信号量五、互斥体总结前言Linux系统是个多任务操作系统,并发访问带来的问题就是竞争,所谓的临界区就是共享数据段,要保证临界区是原子访问的。主要方法有四种:原子操作,自旋锁,信号量,互斥体。本文主要介绍内核下各方
  • 2024-05-30在 Rust 多线程应用程序中锁定 Mutex 时发生死锁
    我正在开发一个Rust应用程序,其中有一个与PacketManager交互的BusDevice。在多线程环境中尝试锁定一个Mutex时,我遇到了死锁。应用程序被卡在锁定Mutex的那一行,再也无法继续。详细描述:在我的Rust应用程序中,我有一个使用PacketManager发送确认数据包的BusDevice。BusD