C++
文章平均质量分 71
jingqi_se
这个作者很懒,什么都没留下…
展开
-
关于编译和运行过程中的字符编码转换的猜测
(1)源代码编码方式 ---> (2)编译器处理的编码方式 ---> (3)目标程序中的字符串编码方式 --> (4)控制台等运行环境编码方式 (1) 源文件编码方式无所谓,只要编译器认得就行;所以可以使用各种编码格式。(2) 编译器编译源文件之前,先将源文件转为统一的编码方式(毕竟编译器不可能为每种源文件编码方式都准备一套处理逻辑;另外,windows核心运行的是原创 2010-02-24 19:59:00 · 542 阅读 · 0 评论 -
多线程下各种单例singleton的实现对比
对比各种单例的实现,并从boost中摘出单例实现,略作修改。原创 2011-04-07 11:47:00 · 993 阅读 · 0 评论 -
跨平台中对于 条件量(condition) 的包装
说明: 条件量(Condition)用于多线程同步,一个条件量常常与一个锁(windows下是临界区,linux下是pthread_mutex_t)同时使用跨平台宏(platform.hpp)的定义参见另一篇博文,当然截取代码实现时可以换成自己习惯的定义。跨平台中条件编译的使用使得其实现代码不是那么容易阅读,但是在使用这个包装类的时候就比较容易阅读了与条件量配合使用的锁类型 (跨平台代码原创 2013-11-02 14:49:01 · 911 阅读 · 0 评论 -
跨平台中对于 互斥量(mutex) 的包装
以下代码在跨平台环境下包装了互斥量(mutex),支持以下平台 linux/windows,vc/gcc/mingw /** * @file - * @author jingqi * @date 2010-7-9 */ #ifndef ___HEADFILE___814FCD2E_2F65_4787_93E5_ECDE19588938_ #define ___HEADFILE___原创 2013-11-02 13:44:57 · 1859 阅读 · 0 评论 -
跨平台中对于 自旋锁(spinlock) 的包装
以下代码在跨平台环境下包装了用户态自选锁(spinlock),支持以下平台: 操作系统linux、windows,编译器vc、gcc、mingw 说明: 跨平台宏(platform.hpp)的定义参见另一篇博文,当然截取代码实现时可以换成自己习惯的定义。跨平台中条件编译的使用使得代码不是那么容易看,但是还好每个函数只有一两句话自旋锁比互斥量轻量一些,适合使用在轻量任务的多线程同步中,会原创 2013-11-02 14:25:13 · 1835 阅读 · 0 评论 -
跨平台中对于 信号量(semaphore) 的包装
信号量,常用于线程间同步。 说明: 跨平台宏(platform.hpp)的定义参见另一篇博文,当然截取代码实现时可以换成自己习惯的定义。跨平台中条件编译的使用使得代码不是那么容易看,但是还好每个函数只有一两句话windows/VC下使用系统API实现,其他情况下使用 pthread 提供的自旋锁 pthread_spinlock_t /** * @file - * @au原创 2013-11-02 14:39:57 · 1174 阅读 · 0 评论 -
跨平台c/c++编码的预定义宏
c/c++中编写跨平台的代码时,难免需要根据不同的操作系统、编译器等准备不同的代码。 首先,不同平台中编译器预定义宏的参考资料 点击这里 其次,我本人仅关注以下平台:linux32/64-gcc, win32/64-vc, win32/64-mingw,这里给一个我自用的侦测上述平台的头文件 /** * @file - * @author jingqi * @date 2011-1原创 2013-11-02 13:14:24 · 2369 阅读 · 0 评论 -
随机生成c/c++头文件保护符
由于c/c++头文件的include机制的关系,头文件中的头文件保护符必不可少。使用头文件保护符可以保护结构体、类、宏等在同一个.c/.cpp文件中不被重复定义。 // new.h #ifndef __NEW__H_ #define __NEW__H_ .... #endif 每次写头文件时,取头文件保护符的名字是个很麻烦的事情。一般都会根据文件名取,但是有时候文件名有相同的,头文件保护符原创 2013-11-02 12:48:55 · 1386 阅读 · 0 评论 -
KMP 字符串搜索算法的c++实现
说明: KMP 字符串搜索算法是基于自动状态机的高效搜索算法假如被搜索的字符串(长串)长度为 n, 要搜索的字符串(字串)长度为 m,则其空间复杂度为 O(m),时间复杂度为 O(n+m)由于该算法是基于自动状态机的,对于字符串分布在不同位置的时的处理较简单(某些公司面试题不是要在不连续内存中搜索字符串嘛,可以用kmp算法简单实现哦,不用考虑字符串拼接啊,中间复杂状态处理之类的)原创 2013-11-02 15:40:00 · 963 阅读 · 0 评论 -
自旋锁小结
Linux内核自旋锁: Kernel中的自旋锁不能够在能够导致睡眠的环境中使用。举个例子,一个线程A获得了自旋锁L;这个时候,发生了中断,在对应的中断处理函数B中,也尝试获得自旋锁L,就会中断处理程序进行自旋。但是原先锁的持有者只有在中断处理程序结束后,采用机会释放自旋锁,从而导致死锁。 Linux内核为读/写自旋锁提供了操作API函数初始化、测试和设置自旋锁。API函数功能说明如下: rw原创 2012-03-06 20:16:26 · 1568 阅读 · 0 评论 -
关于检错、断言和容错性
看下面一段代码int strlen (const char *str){ int ret = 0; while (0 != str[ret]) { ++ret; } return ret;} 首先,没有考虑 str==NULL 的情况,不能在调试的时候检测并定位错误。改为int strlen (co原创 2010-03-13 12:20:00 · 586 阅读 · 0 评论 -
跨平台中对于 读写锁(rwlock) 的包装
读写锁(rwlock)的跨平台包装,支持以下平台: 操作系统linux、windows,编译器vc、gcc、mingw 跨平台宏(platform.hpp)的定义参见另一篇博文,当然截取代码实现时可以换成自己习惯的定义。跨平台中条件编译的使用使得代码不是那么容易看,但是还好每个函数只有一两句话windows/VC下使用系统API实现,其他情况下使用 pthread 提供的自旋锁 pthr原创 2013-11-02 14:36:02 · 1102 阅读 · 0 评论