logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透

我们要是只想看最终版本的可以看看v2和v3就行,两个都是同时支持单单和多多的,一个是用的系统的一个是用的我们自己封装的。,Makefile我就不在这里展示了,后面的版本也不会展示,这个东西的话前面的博客中经常在写,大家自己搞定就好,或者这种简单的任务交给opencode来完成是没问题的,我们需要的是通过写关键代码理解知识点。:信号量的 P 操作已经隐形完成了「队列空 / 满」的条件判断,只要 P

#java#开发语言
Linux 线程同步与互斥(二):线程同步从条件变量到生产者消费者模型全解,原理 + 源码彻底吃透

同步:在保证数据安全(互斥)的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,让多线程协同更合理、更高效。正确的说法(什么是线程同步,为什么需要同步):线程同步指的是线程间对数据资源进行获取,有可能在不满足访问资源条件的情况下访问资源而造成程序逻辑混乱,因此通过进行条件判断来决定线程在不能访问资源时休眠等待或满足资源后唤醒等待的线程的方式实现对资源访问的合理性简单来说互斥:

#java#开发语言
Linux 线程同步与互斥(一):彻底搞懂线程互斥原理、互斥量底层实现与 RAII 封装

核心概念:临界资源是被保护的共享资源,临界区是访问临界资源的代码,互斥保证同一时间只有一个线程进入临界区,原子性是不会被调度打断的操作。线程安全问题根源:多线程并发操作共享资源,且操作不是原子的,会导致数据不一致、超卖等问题。互斥量的作用:通过加锁保证临界区代码的互斥执行,解决共享资源的并发访问问题。互斥量底层实现:基于 CPU 的 swap/exchange 原子指令,保证加锁操作的原子性,多核

#java#jvm#开发语言
Linux 线程深度剖析:线程 ID 本质、地址空间布局与 pthread 源码全解

Thread.hpppthread_t 是用户态线程库维护的线程 ID,本质是进程虚拟地址空间中 TCB 控制块的地址,仅在当前进程内唯一;LWP 是内核轻量级进程的 ID,是操作系统调度的最小单位,系统全局唯一。Linux 下的线程实现,是用户态 NPTL 线程库 + 内核态轻量级进程用户态线程库负责 TCB 管理、栈内存分配、TLS 管理、线程生命周期控制;内核负责线程的调度,通过 clone

#java#开发语言
Linux 进阶指令实操指南:文件查看、时间管理、搜索压缩全场景覆盖(附高频案例)

tail指令从指定点开始将文件写到标准输出,使用tail命令的 -f 选项可以方便的查阅正在改变的日志文件,tail -f filename 会把 filename 里最尾部的内容显示屏幕上,并且不断刷新,使你看到最新的文件内容。就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head用来显示档案的开头至标准输出中,而tail想当然就是看档案的结尾。:查看小文件,小算法,小配

#linux#运维#服务器
C++:智能指针完全指南(原理、用法与避坑实战,从 RAII 到循环引用)

auto_ptr:是 C++98 时设计出来的智能指针,特点是拷贝时把拷贝对象的资源的管理权转移给拷贝对象,这是一个非常糟糕的设计,因为它会导致被拷贝对象悬空、访问报错的问题。C++11 设计出新的智能指针后,强烈建议不要使用auto_ptr,实际上在 C++11 出来之前很多公司也是明令禁止使用这个智能指针的。unique_ptr:是 C++11 设计出来的智能指针,名字翻译为 “唯一指针”。特

#c++#开发语言#算法
C++:vector(从三指针模型到手写完整实现)

public:--我们这里迭代器的使用可以测试一下,实现的打印函数我就直接放上去了,之前讲过test.c:i++)//v[0]++;v[0]++;Print(v);若 vector 存储的是含指针的自定义类型(如 string),直接用 memcpy 拷贝会导致多个对象共享内存,析构时双重释放。本文实现的 reserve 和拷贝构造均用移动 / 拷贝构造函数迁移元素,避免了这一问题。

#c++#开发语言
C++:手把手实现 STL Set/Map(从零编写一棵红黑树到完整容器封装)

由于 T 的类型不固定(K 或 pair),红黑树插入 / 查找时无法直接获取 key,需通过仿函数。map支持[]主要修改insert返回值支持,修改RBTree中的insert返回值为。这里实现一下,- - 的话就不展示了,要实现的话还需要额外带一个_root;STL 中 map 和 set 复用同一颗红黑树的核心是。SGI-STL30版本源代码,map和set的源代码在。,平衡维护逻辑与基础

#c++#开发语言
C++:模板进阶(从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑)

非类型模板参数,就是用编译期可确定的常量作为模板的参数,在模板内部可以直接当常量使用。其中比较典型的例子就是 STL 中的array实际案例1.固定数组大小//模板进阶private:T _a[N];int _top;int main()//10//1000,那是不是就不够,只能改上面的定义,但是改的之后上面的st1就很浪费return 0;用非类型模板参数进行改进//非类型模板参数--很好的解决

#c++#开发语言
C++:vector(从三指针模型到手写完整实现)

public:--我们这里迭代器的使用可以测试一下,实现的打印函数我就直接放上去了,之前讲过test.c:i++)//v[0]++;v[0]++;Print(v);若 vector 存储的是含指针的自定义类型(如 string),直接用 memcpy 拷贝会导致多个对象共享内存,析构时双重释放。本文实现的 reserve 和拷贝构造均用移动 / 拷贝构造函数迁移元素,避免了这一问题。

#c++#开发语言
    共 12 条
  • 1
  • 2
  • 请选择