- 博客(22)
- 收藏
- 关注
原创 C++11多线程---条件变量(三)
互斥量是多线程间同时访问某一共享变量时,保证变量可被安全访问的手段。但单靠互斥量无法实现线程的同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了有力的支持,这就是条件变量。条件变量位于头文件下。以上就是线程互斥锁配套条件变量的使用方法。C++11多线程---线程(一)C++11多线程---互斥锁(二)
2024-03-26 20:16:49
1016
1
原创 C++11多线程---互斥锁(二)
mutex又称互斥量,C++ 11中与 mutex相关的类(包括锁类型)和函数都声明在 #include 头文件中,所以如果你需要使用 std::mutex,就必须包含该头文件。std::lock_guard 在构造函数中进行加锁,析构函数中进行解锁。2.锁在多线程编程中,使用较多,因此c++11提供了lock_guard模板类;在实际编程中,我们也可以根据自己的场景编写resource_guard RAII类,避免忘掉释放资源。
2024-03-26 20:15:00
819
原创 C++11多线程---线程(一)
C++11 引入了 thread 类,降低了使用多线程的复杂度,原先使用多线程只能用系统的 API,无法解决跨平台问题,代码平台的改变,对应多线程代码也必须要修改。在 C++11 中只需使用语言层面的 thread 可以解决这个问题。编写并发程序需引入头文件。本文仅仅简单介绍了c++11线程的基本使用以及相关的API调用。
2024-03-26 20:11:15
717
原创 网络编程之基础知识
前面编写的进程间通信:只能用于同一台主机内部不同的进程,而这次讲诉的网络编程也是进程间通信的一种方式,它可以用于不同主机间的进程通信。
2023-02-14 17:55:08
248
原创 系统编程之进程间的 信号量 通信(4)
这篇文章将讲述另一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。本文仅仅简单介绍了信号量的原理和使用方法。
2023-02-03 15:41:19
202
原创 系统编程之进程间的共享内存通信(3)
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
2023-02-03 15:27:34
158
原创 c++新特性之匿名函数lambda
使用STL时,往往会大量用到函数对象,为此要编写很多函数对象类。有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费。而且,定义函数对象类的地方和使用函数对象的地方可能相隔较远,看到函数对象,想要查看其 operator() 成员函数到底是做什么的也会比较麻烦。对于只使用一次的函数对象类,能否直接在使用它的地方定义呢?Lambda 表达式能够解决这个问题。使用 Lambda 表达式可以减少程序中函数对象类的数量,使得程序更加优雅。1.如果捕获列表为[&]
2022-11-08 11:52:34
251
原创 c++新特性之右值引用和移动语义
C++11中引用了右值引用和移动语义,可以避免无谓的复制,提高了程序性能。C++11在性能上做了很大的改进,最大程度减少了内存移动和复制,通过右值引用、forward、emplace和一些无序容器我们可以大幅度改进程序性能。右值引用仅仅是通过改变资源的所有者来避免内存的拷贝,能大幅度提高性能。forward能根据参数的实际类型转发给正确的函数。emplace系列函数通过直接构造对象的方式避免了内存的拷贝和移动。
2022-11-08 11:19:15
519
原创 设计模式介绍以及学习方法
设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案,简白的说就是——"解决问题的固定套路"。
2022-10-18 17:09:59
403
原创 C++动态内存管理之智能指针
动态内存管理引起的所谓的问题是编程领域的,它的成因非常直截了当---但它产生的缘由有时却非常隐晦需要非常仔细布局你的每一行代码才能抵抗它们对你的系统的侵蚀。而智能指针就能解决上面的问题,它的主要的功能就是自动帮我们1、智能指针主要解决以下问题内存泄漏:内存手动释放,使用智能指针可以自动释放共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题2、其中后三个是C++11支持,并且第一个auto_ptr已经被C++11弃用auto_ptrshared_ptr 共享对象的所有权,但性能略差。
2022-10-18 12:01:32
2628
原创 锁与原子操作CAS的底层实现
对于服务器而言,锁发生的场景主要是在多线程或多进程,多任务的操作系统中,避免不了会共享一些资源,就会出现线程a,线程b或者进程a,进程b同时操作同一资源(临界区)的问题会产生无法预料的现象,副作用。所以需要加锁或者对数据进行原子操作。
2022-09-23 17:28:10
476
原创 mysql连接池的实现
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成 ,一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
2022-09-22 14:38:12
294
原创 线程池代码的C实现以及在各种开源框架中的使用
线程池的本质是对任务和线程的管理,而做到这一点最关键的思想就是将任务和线程两者解耦,不让两者直接关联,才可以做后续的分配工作。在一个事件循环中,可以处理多个就绪事件,这些就绪时间在reactor模型中时串行执行的,一个事件处理延时若耗时较长,会延迟其它同时触发的事件的处理(对于客户端而言,响应会变得较慢)。对于线程,内存,oracle的连接对象等等,这些都是资源,程序中当你创建一个线程或者在堆上申请一块内存时,都涉及到很多系统调用,也是非常消耗CPU的,,内存池,连接池,对象池等等。2、线程池的使用场景。
2022-09-19 11:58:07
934
原创 基于C语言的内存池实现
设计内存池的目标是为了保证代码高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,从而减少系统中出现有效空间足够,而无法分配大块连续内存的情况。对于线程,内存,oracle的连接对象等等,这些都是资源,程序中当你创建一个线程或者在堆上申请一块内存时,都涉及到很多系统调用,也是非常消耗CPU的,在把内存放入内存池的同时,要把标志位置为空闲。就是很有可能会造成内存的浪费,原因也很明显,开始分配了一大块内存,不是全部都用得到的。4、内存池的代码实现。
2022-09-16 15:48:39
1228
原创 QT应用exe文件在Windows电脑上运行
1、QT中debug变为release,点击运行2、点击运行,exe文件为点击运行生成的运行代码(生成路径如下图),可自己修改路径3、新建一个文件夹,吧exe文件拷贝到文件夹下(*exe文件夹如上图)4、在电脑上搜索QT 5.9.9(winGW)打开进入新建文件夹下5、运行windeployqt 代码文件名 ,就会在新建文件夹下生成环境如下图...
2022-04-26 20:05:13
1380
原创 Ubuntu使用git clone登录外网下载资源
一、背景1、使用 git clone 下载资源报错误: Failed to connect to android.googlesource.com port 443: Connection timed out二、Ubuntu安装配置1、安装git,sshsudo apt-get install gitsudo apt-get install ssh2、注册github账号,已有跳过,github官网:https://github.com如果网络限制登录不了可以在网
2022-04-26 17:42:41
4419
原创 如何在开发板上使用sftp命令访问sftp-server
一、背景 1、指定用户只能通过sftp访问上传下载文件,不能通过SSH登陆,并锁定在特定的目录下,而开发板没有sftp,如图1。图1二、需要下载的库件(openssl,openssh)2.1、下载路径(github官网下载)2.2、一下为本人下载的库文件分享https://share.weiyun.com/UOPUjHgo三、Ubuntu交叉编译...
2021-11-29 17:58:04
2527
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人