Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

01解密内存屏障

内存屏障是一种底层原语,在不同计算机架构下有不同的实现细节。本文主要在x86_64处理器下,通过Linux及其内核代码来分析和使用内存屏障

02内存屏障(Memory barrier)

本文例子均在 Linux(g++)下验证通过,CPU 为 X86-64 处理器架构。所有罗列的 Linux 内核代码也均在(或只在)X86-64 下有效。

03Pthreads并行编程之spin lock与mutex性能对比分析

POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。

04在多核多线程程序中要慎用volatile关键字

这篇文章详细剖析了为什么在多核时代进行多线程编程时需要慎用volatile关键字。

主要内容有:

1. C/C++中的volatile关键字

2. Visual Studio对C/C++中volatile关键字的扩展

3. Java/.NET中的volatile关键字

4. Memory Model(内存模型)

5. Volatile使用建议

05多线程程序中操作的原子性

原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?

06非常实用全面的 C++框架,库类等资源

这次的资源涉及到了标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等,C++程序员学习必备!

07double与uint64互转精度丢失

double: 1bit(符号位) 11bits(指数位) 52bits(尾数位),uint64_t最大值转为double型:64bit的1->1.111(52个)*2^63 (在vs中实际转换后表示成了1.00*2^64,应该是因为最后11个bit 进了一位),不超过53位时才不会有精度问题

08多线程编程使用无锁结构会不会比有锁结构更快?

一部分朋友觉得用锁会影响性能,其实锁指令本身很简单,影响性能的是锁争用(Lock Contention),什么叫锁争用,就是你我都想进入临界区,但只能有一个线程能进去,这样就影响了并发度

09c++ 中的重载全局new,delete

new为我们做了两件事情,一、申请一块足够的内存空间供存放对象,对于new一个数组对象,编译器会计算出总共的空间,然后执行类似c语言中malloc函数类似的功能。二、初始化对象,对于单个对象,包括包括基本对象和类对象,可以通过括号初始化,比如int * pn = new int(3); A * pa = new A(3); 然而对于数组不能初始化,对于类对象,必须定义无参数的构造函数。

10C++ 中对象创建(构造、拷贝、赋值、隐式类型转换)

对象创建、拷贝构造、赋值、隐式类型转换、explicit、按值传递 (passed by value)、按引用传递 (passed by reference)、参数传递、返回值传递

11内存错误,int_malloc错误

在修改较多文件,make和执行,发现总是提示SegmentFault,调试也找不到原因(gdb调试时,往往进入某个普通的函数就SegmentFault),new时段错误

12禁用自动生成的函数(定义且不实现)

如果想让你的类定义出来的对象是独一无二的,即对象无法被复制,或者使用赋值操作符赋给另外一个对象,那么最好的方法就是禁用拷贝构造函数和赋值操作符。下面介绍几种禁用的方法。(方法来自Effective C++,如果想禁用类的其他函数,方法类似)(Effective C++之06)

我的名片

网名:丰果 | Ranger

职业:游戏开发

现居:上海市

Email:86668082@qq.com




站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流