
高并发
MaxMaxXiong
这个作者很懒,什么都没留下…
展开
-
C++实现定时器
定时器的主要数据: 1.一个线程变量,保存定时器线程 2.一个互斥锁,配合条件变量使用 3.一个条件变量,结合互斥锁,可以是线程不执行任务时,睡眠一段时间,在退出调用时,可以唤醒线程完成退出 4.定时执行函数,具体的定时执行业务操作 5.间隔时间,定时器间隔一段时间调用定时执行函数 6.一个退出标识,标志是否退出定时线程循环 7.立即执行标识,标识新建状态的定时线程是否立即执行一次任务,而不需等待一个间隔时间才开始执行第一次任务#include <ios...原创 2021-08-27 16:33:43 · 13365 阅读 · 0 评论 -
C++读写锁的托管包装器
// 读锁template<class T>class CReadLock{public: explicit CReadLock(T& rwmutex) : m_rwmutex_(rwmutex) { m_rwmutex_.LockRead(); } virtual ~CReadLock() { m_rwmutex_.UnLockRead(); }private: CReadLock() = delete; CReadLock(const T&.原创 2021-08-17 23:21:17 · 134 阅读 · 0 评论 -
C++读写锁- 一个互斥量、一个条件变量、一个计数变量实现读写锁
// 一个互斥量、一个条件变量、一个计数变量实现读写锁class CRWMutex2{public: CRWMutex2() : m_count_(0) { } virtual ~CRWMutex2() = default; void LockRead() { std::unique_lock<std::mutex> locker(m_mutex_); while (m_count_ < 0) m_cond_.wait(locker, [=] {r.原创 2021-08-17 22:27:48 · 410 阅读 · 0 评论 -
C++实现递归锁CRecursiveMutex
1、递归锁允许同一个线程多次加锁而不死锁,不同线程加锁和正常的互斥量一样。2、应用场景解决这后续描述的一类问题。在一个函数内给互斥量上了锁还没有解开,然后又调用了另一个函数,这个被调用的函数也去给互斥量上锁,这种情境下就会出现死锁。3、递归互斥量主要是通过对同一个线程的加锁请求计数。#ifndef _RECURSIVELOCK_H_#define _RECURSIVELOCK_H_#include <map>#include <mutex>#in原创 2021-08-17 18:29:29 · 1027 阅读 · 0 评论 -
C++读写锁-实现优先写
#ifndef _RWLOCK_H_#define _RWLOCK_H_#include <mutex>#include <condition_variable>// 读写互斥量// 当有写和读操作同时竞争时,写操作优先与读操作class CRWMutex{public: CRWMutex() : m_read_count_(0) , m_write_count_(0) , m_is_writing_(false) { } virtual .原创 2020-06-08 17:31:15 · 938 阅读 · 0 评论 -
线程的基本概念、线程的基本状态及状态之间的关系
基本概念:线程,即轻量级进程(LWP:Light Weight Process),是程序执行流的最小单元。一个线程是进程的一个顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。在一个进程内部,要同时干多件事情,就需要同时运行多个子任务,我们把进程内的这些子任务叫做线程。多...原创 2018-12-19 19:24:01 · 4847 阅读 · 1 评论 -
进程的基本概念和基本状态
基本概念:狭义定义:进程是正在运行的程序的实例,也就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。担当分配系统资源(CPU时间和内存)的实体。进程的概念主要有两点:第一,进程是一个程序的实体。每一个进程都有它自己的地址空间,一般情况下,包括文...原创 2018-12-19 19:27:38 · 2149 阅读 · 0 评论