02 2022 档案

摘要:目录线程类Thread要解决的问题封装线程类ThreadThread 接口Thread 实现内部类ThreadData当前线程CurrentThreadcacheTid()获取当前线程tidisMainThread()判断调用线程是否为main线程sleepUsec() 休眠指定微秒数ThreadN 阅读全文
posted @ 2022-02-28 21:30 明明1109 阅读(698) 评论(5) 推荐(0) 编辑
摘要:目录多线程同步中的问题CountDownLatchCountDownLatch的接口CountDownLatch的实现barrier实现线程同步barrier与自定义CountDownLatch区别参考 多线程同步中的问题 多线程环境中,常有这样一种同步情况:一个线程等待其他所有线程完成指定工作。 阅读全文
posted @ 2022-02-28 11:22 明明1109 阅读(379) 评论(0) 推荐(0) 编辑
摘要:目录互斥锁mutex的选择MutexLock类MutexLockGuard类测试 互斥锁mutex的选择 互斥锁mutex有2种方案: 1)C++11以后,使用std::mutex,当然,特殊应用场景下,也有另外三种:std::recursive_mutex(递归mutex类),std::timed 阅读全文
posted @ 2022-02-27 23:36 明明1109 阅读(747) 评论(0) 推荐(0) 编辑
摘要:目录值语义与引用语义如何为一个class实现值语义,引用语义?定义标记class,标明对象拷贝性copyable classnoncopyable classcopyable及noncopyable应用阻止copy操作 值语义与引用语义 值语义指的是对象的拷贝与元对象无关,就像拷贝int一样。C++ 阅读全文
posted @ 2022-02-27 21:01 明明1109 阅读(282) 评论(0) 推荐(0) 编辑
摘要:目录原子操作AtomicIntegerT<T>模板类单元测试知识点gcc原子操作volatile关键字参考 原子操作 C++中的原子操作: 1)C++11以后,提供st::atomic<T>可以实现T类型数据的原子操作,主要包括:初始化、读取值、写值、自增自减(i.e. 前置或后置++)等。 2)对 阅读全文
posted @ 2022-02-27 20:44 明明1109 阅读(378) 评论(0) 推荐(0) 编辑
摘要:如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2022-02-26 23:43:00.000000",这种方式便于人查看,但不便于程序中的比较和计算。比如有2个时刻A和B,计算哪个时刻在前,哪个在后,或者要计算时刻A和B的时间差时,这种字符串表示方式就很麻烦。 我们想到将字符串形式的 阅读全文
posted @ 2022-02-27 20:16 明明1109 阅读(913) 评论(0) 推荐(0) 编辑
摘要:Linux有2种方法可以实现线程局部存储: 1)使用NTPL提供的函数; 2)使用编译器扩展的__thread关键字。 NPTL(Native POSIX Thread Library),顾名思义,本地POSIX线程库。 1. 使用NPTL库函数实现线程局部存储 NPTL提供实现线程局部存储功能的接 阅读全文
posted @ 2022-02-24 23:24 明明1109 阅读(380) 评论(0) 推荐(0) 编辑
摘要:Linux中,我们知道getpid(2) 可以获取调用进程的pid,那么如何获取一个线程的id呢? 可以用系统调用gettid(2)获取内核中的线程id ,POSIX线程库提供的pthread_self(3)方法获取分配的线程id。C++11 std::thread的get_id()方法,封装的也是 阅读全文
posted @ 2022-02-24 10:22 明明1109 阅读(7539) 评论(0) 推荐(0) 编辑
摘要:上半部分,见C++ Primer学习笔记 - 第16章 模板与泛型编程(一) 16.3 重载与模板 函数模板可以被另一个模板或普通非模板函数重载。跟普通函数重载一样,名字相同的函数必须具有不同数量或类型的参数。 如果涉及到函数模板,则函数匹配规则会在下面几个方面受到影响: 对于一个调用,其候选函数包 阅读全文
posted @ 2022-02-21 22:42 明明1109 阅读(98) 评论(0) 推荐(0) 编辑
摘要:在查看<netinet/in.h>中sockaddr_in6代码时,发现有一个成员sin6_scope_id,表示IPv6 scope-id。而在sockaddr_in中是没有该成员的。 那么,这个成员是干什么的呢? 要讨论这个问题,先看一下IPv6的基础知识:IPv6地址分类及表示法。 IPv6地 阅读全文
posted @ 2022-02-15 23:38 明明1109 阅读(2841) 评论(0) 推荐(0) 编辑
摘要:前一节Linux backtrace()系列函数 ,已经知道可以通过backtrace,backtrace_symbols得到函数的调用栈信息。不过,在C++中,得到的是一堆难以识别的符号,如何解码得到准确的函数名信息? 如,前面得到的函数调用栈信息: $ ./backtrace 2 backtra 阅读全文
posted @ 2022-02-15 12:21 明明1109 阅读(346) 评论(0) 推荐(0) 编辑
摘要:backtrace()系列函数 backtrace()系列函数有3个:backtrace,backtrace_symbols,backtrace_symbols_fd。主要用于应用程序反调试(self-debugging)。 参见man 3 BACKTRACE,3个函数原型: #include <e 阅读全文
posted @ 2022-02-15 00:22 明明1109 阅读(4293) 评论(0) 推荐(0) 编辑
摘要:18.1 异常处理 异常处理(exception handling)机制,允许程序中独立开发的部分能够在运行时就出现的问题进行通信,并做出相应的处理。 异常使得我们能将问题的检测和解决过程分离开,传统C语言异常处理必须对每个函数返回的异常作处理,也就是检测和解决过程捆绑在一起。 这样做的优势在于: 阅读全文
posted @ 2022-02-14 16:42 明明1109 阅读(79) 评论(0) 推荐(0) 编辑
摘要:题目来源:01背包 | 牛客网 描述 已知一个背包最多能容纳体积之和为v的物品。现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi。求当前背包最多能装多大重量的物品? 数据范围: 1≤v≤1000,1≤n≤1000,1≤n≤1000 , 1≤vi≤1000, 1≤wi≤1000 进阶: 阅读全文
posted @ 2022-02-13 23:55 明明1109 阅读(73) 评论(0) 推荐(0) 编辑
摘要:timerfd特点 timerfd的特点是将时间变成一个文件描述符,定时器超时时,文件可读。这样就能很容易融入select(2)/poll(2)/epoll(7)的框架中,用统一的方式来处理IO事件、超时事件。这也是Reactor模式的特点。 timerfd定时器与传统Reactor模式定时器 传统 阅读全文
posted @ 2022-02-12 13:39 明明1109 阅读(4132) 评论(0) 推荐(2) 编辑
摘要:之前讲述了如何利用readdir/readdir_r,对指定目录进行遍历并输出,参见:Linux C 讲解系统调用readdir, readdir_r 以及如何遍历目录下的所有文件 这里讲述利用scandir和alphasort如何遍历指定目录,并对文件名排序输出。 scandir,alphasor 阅读全文
posted @ 2022-02-07 23:36 明明1109 阅读(4346) 评论(0) 推荐(0) 编辑
摘要:系统调用基本概念 为了和用户空间上运行的进程进行交互,内核提供了一组接口,透过该接口,应用程序可以访问硬件设备和其他操作系统资源。这组接口称为系统调用。 系统调用是用户空间和硬件设备之间添加的一个中间层,主要作用: 1)为用户空间提供一种硬件的抽象接口。 2)保证系统的稳定和安全。 3)每个进程都运 阅读全文
posted @ 2022-02-02 00:07 明明1109 阅读(1010) 评论(0) 推荐(0) 编辑