- 2024-11-02C++ 手撕--共享式智能指针(shared_ptr)的简单实现
C++手撕--共享式智能指针(shared_ptr)的简单实现共享式智能指针(shared_ptr):#include<iostream>#include<mutex>usingnamespacestd;template<typenameT>classShared_ptr{private:T*ptr;int*ref_count;std::mutex*mtx;voidrelease(){
- 2024-10-15C++互斥锁
互斥锁(Mutex,全称:MutualExclusion)是一种用于多线程编程中的同步机制,用来确保在同一时刻只有一个线程可以访问共享资源。它通过锁定机制防止多个线程同时对共享资源进行读写操作,从而避免数据竞争和不一致性问题。互斥锁的核心思想是保证互斥访问,即当一个线程持有互斥锁并正在访问
- 2024-09-19单细胞数据 存储方式汇总
(单细胞下游分析——不同类型的数据读入,与部分数据类型的转化).h5ad(anndata数据格式)10x_mtx(cellranger输出,三个文件)就是cellranger上游比对分析产生的3个文件:├──xxx_feature_bc_matrix│├──barcodes.tsv.gz:细胞标签(barcode)│├──features.tsv.gz:基因ID(
- 2024-09-08[TODO]MultiClient
MulitClient:packagepluginimport( "log" "sync" "time")typeMultiClientConfigstruct{ FirstAddressstring FirstPortint SecondEnablebool SecondAddressstring SecondPortint ConnectionTypeint}
- 2024-09-08并发编程数据结构-栈
并发编程数据结构-栈有锁栈Stack1-基础线程安全栈Stack1是一个简单的线程安全栈实现,使用了std::mutex来保证push和pop操作的原子性。主要特点包括:使用std::lock_guard确保操作期间栈的线程安全。提供了两种push操作(左值引用和右值引用),优化了性能。pop操作抛
- 2024-09-04在线OJ项目详解
一、项目准备工作1、什么是在线OJOnlineJudge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试用例来检验程序源代码的正确性。2、所用技术C++STL标准库。cpp-httplib第三方开源网络库。ctemplate第三方开源前端网页
- 2024-08-28C++学习随笔——lock_guard和mutex的使用方法
std::mutex和std::lock_guard是C++标准库中用于多线程同步的工具,主要用于防止多个线程同时访问共享资源,导致数据竞争问题。 std::mutex是一个用于互斥锁的类,提供了锁定(lock)和解锁(unlock)的功能。使用方法:#include<iostream>#include<thread>#include<mutex>std::
- 2024-08-13C 多线程
C多线程C程序中经常同时执行多项任务。例如,一个程序可能:(1)在执行程序过程中通过完成并行任务来提高性能。(2)在处理用户输入的同时,在后台进行耗时的数据通信和实时操作。通过并行执行(concurrentexecution)程序中的部分代码,可以实现不同任务同时进行。特别是在多处理器系
- 2024-07-17网络安全实验一 分组密码实验(AES加解密)
本实验代码附在文末实验目的与要求:理解对称密码体制和分组密码算法的基本思想理解分组密码AES的基本原理实现AES的加解密过程,可以对各种文件(word、txt、mp3、jpg)进行加解密实现分组密码的密码分组链接工作模式与计算器工作模式实验环境:MicrosoftVisualStudio2022等
- 2024-07-16【RAII机制】的使用方法及优势
RAII(ResourceAcquisitionIsInitialization)机制是C++中一种非常流行的资源管理策略,其核心思想是利用对象的生命周期来自动管理资源。当对象被创建时,它自动获取所需的资源;当对象被销毁时(例如,离开其作用域时),它自动释放这些资源。这种机制有助于减少资源泄露,增
- 2024-07-06LRU算法简介
LRU(LeastRecentlyUsed,最近最少使用)算法是一种常用于缓存管理的算法,用于在缓存空间有限的情况下,决定哪些数据应该被移除。它的基本思想是:如果一个数据最近被访问过,那么在将来一段时间内它被再次访问的概率较高。因此,当缓存已满,需要移除数据时,优先移除那些最近最少被使用的数据。
- 2024-06-18【UG\NX二次开发】PK 求对象在某方向上的极限点(PK_BODY_find_extreme)
UF_initialize();tag_tps_tag=null_tag;UF_PS_ask_ps_tag_of_object(objtag,&ps_tag);//通过NX对象获取PK对象 doublemainDir[3]={0,0,1};//求对象在主方向上的极限点,此处是在求正Z方向上的极限点doublemtx[9]={0};UF_MTX3_initialize_x(mainDir,mtx);
- 2024-06-01C++多线程原理详解
学习C++多线程时,我有如下疑问:mutex的lock和unlock做了什么?mutex、lock_guard、unique_lock,它们之间的关系是什么?condition_variable中的wait做了什么?带着这些疑问,我查阅了一些资料,整理出本文。文章目录一、mutex二、lock_guard三、unique_lock四、condition
- 2024-04-27矩阵转置 O(1)
矩阵转置链接为:https://www.acwing.com/problem/content/3595/使用了辅助空间的:#include<iostream>usingnamespacestd;constintN=110;inta[N][N];intb[N][N];intmain(){intn;cin>>n;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)
- 2024-01-18线程同步之互斥锁
目录如何使用Mutex中的lock与unlocktry_lock、try_lock_for和try_lock_untiltry_locktry_lock_fortry_lock_until如何使用Mutex中的lock与unlock在C++11中,您可以使用std::mutex中的lock和unlock函数来实现线程同步。lock函数用于锁定互斥量,而unlock函数用于解锁互斥量。下面是
- 2024-01-10张正友棋盘代码-python
具体实现方案:棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的
- 2023-10-24c: thread in Ubuntu 22.04
/***@filehelloworld.c*@authoryourname(
[email protected])*@briefthread*@version0.1*@date2023-10-24*ide:vscodec11,c17Ubuntu22.04*@copyrightCopyright(c)2023站在巨人的肩膀上StandingontheShouldersofGiants2023**
- 2023-10-22c: thread in Ubuntu
/***@filehelloworld.c*@authoryourname(geovindu)*@brief*ide:vscodec11,c17*@version0.1*@date2023-10-21**@copyrightCopyright(c)2023站在巨人的肩膀上StandingontheShouldersofGiants**/#include<stdlib.h>#includ
- 2023-09-28线程问题
竞态条件(RaceCondition):多个线程对共享资源进行读写操作时,可能会产生无法预测的结果。解决方案:使用互斥锁、信号量、读写锁等同步机制来保护共享资源的访问。示例代码:#include<mutex>std::mutexmtx;//声明互斥锁voidthreadFunc(){std::lock_guard<std::mutex>
- 2023-09-27C++多线程Multithreading std::condition_variable
多线程Multithreading#include<iostream>#include<thread>#include<mutex>#include<condition_variable>std::mutexmtx;std::condition_variablecv;boolisOdd=true;voidprintOdd(){for(inti=1;i<=100;i+=2){
- 2023-08-12C++互斥锁
C++11提供了4种锁机制mutex:互斥锁timed_mutex:带超时机制的互斥锁recursive_mutex:递归互斥锁recursive_imed_mutex:带超时机制的递归互斥锁!使用前需添加头文件#include<mutex>metex:使用伪代码方式mutexmtx;mtx.lock();//申请加锁。(需要加锁的资源)mtx.unlo
- 2023-07-31BUS_MTX
ARM的BUSMatrix的作用ARM的BUSMatrix就是多主(Core,DMA等),多从(内部RAM,APB,外部总线等)的交联和仲裁。目的是为了提高不同主机访问不同外设情况下的带宽,另外一个就是简化BusMaster的协议设计。比如,DMA把片内RAM的数据搬运到APB的外设,如串行口。同时Core从外部总线,SDRAM取指令。如果
- 2023-07-15EaselJS 源码分析系列--第二篇
在第一篇中我们大致分析了从:创建舞台->添加显示对象->更新显示对象的源码实现这一篇将主要分析几个常用显示对象自各draw方法的实现让我们看向例子examples/Text_simple.html这个例子中使用了三个显示对象类Bitmap、Text、ShapeBitmapdraw以下例子中添加了一
- 2023-07-02C++ 惯用法之 RAII
RAII(ResourceAcquisitionIsInitialization)资源获取即初始化,是C++中最基本、应用最广范的惯用法(idiom)之一。RAII的基本思想是通过构造/析构函数,对资源的获取/释放进行封装,然后借助局部对象的自动生命周期来管理资源。使用RAII可以让用户无需手动管理资源的获取/释放,减少出
- 2023-06-18C++面试八股文:什么是RAII?
C++面试八股文:什么是RAII?某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:面试官:什么是RAII?二师兄:RAII是ResourceAcquisitionIsInitialization的缩写。翻译成中文是资源获取即初始化。面试官:RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对