摘要:可以使用gcc提供的内置函数__atomic_load_n()来原子地一次性读取多个变量的值。该函数使用了GCC内置的原子操作,可以保证在不被中断的情况下完成读取。 以下是一个示例代码,读取三个整数变量a、b和c的值: #include <stdio.h> #include <stdatomic.h
阅读全文
摘要:互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。 假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列添加数据的时候
阅读全文
摘要:/* *lock_guard C++源码 内容也比较简单 *私有化了拷贝构造和赋值拷贝 *在内部对锁和构造和析构进行了适配 */ template<class _Mutex> class lock_guard<_Mutex> { // specialization for a single mute
阅读全文
摘要:将 emplace_back() 和 push_back() 中区别最大的程序拎出来看: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, std::forward<_Args>(__args)...); // empl
阅读全文
摘要:#include <iostream> // std::cout #include <atomic> // std::atomic #include <thread> // std::thread #include <vector> // std::vector // a simple global
阅读全文
摘要:#include <iostream> int getValue () { int ii = 10; return ii; } int main() { std::cout << getValue(); return 0; } root@ubuntu:~/c++# g++ -std=c++11 ri
阅读全文
摘要:#include <iostream> using namespace std; int main() { int n = 10; int &r1 = n; //auto推导 auto r2 = r1; r2 = 20; cout << n << ", " << r1 << ", " << r2 <
阅读全文
摘要:1、std::async函数原型: template<class Fn, class... Args> future<typename result_of<Fn(Args...)>::type> async(launch policy, Fn&& fn, Args&&...args); 功能:第二个
阅读全文
摘要:1.1 可调用对象(Callable Objects) 可调用对象有如下几种: 函数指针 具有operator()成员函数的类对象(仿函数) 可被转换为函数指针的类对象 类成员(函数)指针 以上涉及的对象可以像一个函数一样做调用操作,统称为可调用对象。现在,C++11通过提供std::functio
阅读全文
摘要:C++原子库中仅保证atomic_flag是保证无锁的,而atomic< int>,atomic< bool>不是 spinlock.h #ifndef _SPINLOCK_H_20170410_ #define _SPINLOCK_H_20170410_ #include <atomic> cla
阅读全文
摘要:nullptr使用代码如下: int *ptr = nullptr; 大家对此有过疑问吗,都是表示空指针,之前NULL使用的好好的,为什么要引入nullptr,nullptr和NULL又有什么区别呢? 首先看下NULL究竟是什么? 源码在此: #ifndef NULL #ifdef __cplusp
阅读全文
摘要:unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索
阅读全文
摘要:default c++11 引入 default 特性,多数时候用于声明构造函数为默认构造函数,如果类中有了自定义的构造函数,编译器就不会隐式生成默认构造函数,如下代码: struct A { int a; A(int i) { a = i; } }; int main() { A a; // 编译
阅读全文
摘要:一、概念 initializer_list是C++11中提供的一种标准库类型(ps:其实也是一个模板类),用于表示某种使用特定类型的值的数组。 initializer_list中的值都是常量值,无法修改。 二、提供的操作(以int型举例) 申明: initializer_list<int> lst;
阅读全文
摘要:#include <iostream> using namespace std; class A { private: int i=5; string str="init value"; public: A(){ str="A()"; i=99; } A(int ii):A(){ //不能写成AA(
阅读全文
摘要:ESTAB 状态下的 Recv-Q Send-Q 分别表示内核协议栈的发送缓冲区和接受缓冲区中保存的内容字节数。 在 Linux 上,TCP 的三次握手在内核里完成。内核通过一个半连接和已连接 2 个队列来实现。 已连接队列的大小由 net.core.somaxconn 和 int listen(i
阅读全文
摘要:root@ubuntu:~# netstat -s | grep reject 71 packetes rejected in established connections because of timestamp root@ubuntu:~# netstat -s | grep reject 7
阅读全文
摘要:1、定义 2、核心接口 queues主要由成员函数push(),front(),back(),pop()构成。 push()将元素置入queue中。 front()会返回queue内的下一个元素(也就是第一个被置入的元素) back()会返回queue的最后一个元素(也就是最后一个被插入的元素) p
阅读全文