CAS 的跨平台实现方案 以及 基于CAS 的无锁多线程安全日志类
CAS
CAS, compare-and-swap, 原子的比较和设置变量值。
#include <stdio.h>
#if defined(__linux__) || defined(__unix__)
#define CAS32(ptr, val_old, val_new[......]
CAS, compare-and-swap, 原子的比较和设置变量值。
#include <stdio.h>
#if defined(__linux__) || defined(__unix__)
#define CAS32(ptr, val_old, val_new[......]
下述代码中声明类Example对象的数组e[2],然后新建了Example(1)对象并赋值给e[0]。通过这种方式设置类对象数组,称为赋值,而不是初始化。
这个过程实际上赋值过程,存在临时对象Example(1)的构造和析构。而通过类对象数组初始化就不存在生成临时对象这一过程。先看类对象数组声明和赋[……]
请看下面的例子,它成功调用了类的私有成员函数。
[cpp]//鸟,可以飞
class Bird {
public:
virtual void fly(){cout<<"Bird fly"<<endl;};
};
//鸵鸟,是鸟,但不可[……]
注:本想自己写一点笔记,但是发现了下面这篇文章已经总结的很好,就转过来了珍藏吧。
转自: 网易博客 – 好记性不如烂笔头—Leo – C++中public,protected,private访问
————————————————[……]
给定一个n,n为奇数,求一个n*n的二维数组,1 位于数组的中心,其它数绕中心点依次旋转并递增,如n=5时,数组如下:
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
给定一个n,求一个n*n的二维数组,该数组的值沿45°方向的斜线依次递增。如n=4时,数组为
1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16
将数组分成上三角(包括对角线)和下对角两个部分分别计[……]
程序中经常会用到计时,下面总结了常见的几种计时方法,包括clock()、time()、GetTickCount()、QueryFrequencyCount(),使用的方法大致一致,符合下面的规范。通过在代码开始和结束处分别获得某个计数值,计算(计数值差值/计数的频率)获得代码的执行时间。
start[......]
主要有四种方式:临界区(CRITICAL_SECTION)、互斥对象(Mutex,Mutual Exclusion)、事件对象(Event)、信号量(Semaphore)。
其中临界区效率最高,但只能实现本进程内的线程同步。其它三个可以实现多个进程内的线程同步。信号量功能最强大可实现线程互斥也可以用[……]
基本的有32个保留关键字(Reserved Keywords),后续的C99和C11标准又增添了一些关键字。
char | short | int | unsigned |
long | float | double | struct |
union | void | enum | signed |
const | volatile | typedef | auto |
register | static | extern | break |
case | continue | default | do |
else | for | goto | if |
return | switch | while | sizeof |
注意: sizeof是关键字,而不是函数或者宏
_Bool | _Complex | _Imaginary | inline | restrict |
_Bool与C++中的bool类型相同,值为0或1,定义在<stdbool.h>中
_Complex和_Imaginary用于定义复数类型。
inline与C++中的inline相同,内联支持。
restrict用于修饰指针。
_Alignas | _Alignof | _Atomic | _Generic |
_Noreturn | _Static_assert | _Thread_local |
主要来源:维基百科“C语言”
[……]
上一篇中使用CFileFind实现了递归删除文件夹。这一篇继续使用CFileFind类实现文件夹的复制。
开始之前,先讲一下文件最常用的三个属性title、name、path的区分。比如如下代码
CFile file("C:/note/file.t[......]
最近在看MFC 的文件操作,从网上淘了一本比较讲MFC文件操作比较全的电子书,然后开始试手。在删除文件夹时,遇到了问题,通过查看MSDN和网友的论坛留言,自己总算是解决了这个问题,现在与大家共享。
MFC中提供了删除文件夹的一个封装函数 RemoveDirectory()
BOOL WINAPI R[......]