函数可重入性及编写规范

一、可重入函数
1)什么是可重入性?
可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入 函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

2)可重入函数:
不为连续的调用持有静态数据。  
不返回指向静态数据的指针;所有数据都由函数的调用者提供。  
使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
如果必须访问全局变量,记住利用互斥信号量来保护全局变量。
绝不调用任何不可重入函数。

3)不可重入函数:
函数中使用了静态变量,无论是全局静态变量还是局部静态变量。

分类:Linux C/C+| 阅读(60)| 评论(0)

Implicitly sharing

COW is used. Shallow copy takes place when copy construct a new object. Deep copy when writing takes place.

Qpen.h
void QPen::setWidth(int width)
{
    if (width < 0)
        qWarning("QPen::setWidth: Setting a pen width with a negative value is not defined");

分类:Linux C/C+| 阅读(65)| 评论(0)

讲讲volatile的作用

2011-01-25 14:48

Cited from http://blog.21ic.com/user1/2949/archives/2007/35599.html
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:  
    1). 并行设备的硬件寄存器(如:状态寄存器)  
    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)  
    3). 多线程应用中被几个任务共享的变量

分类:Linux C/C+| 阅读(148)| 评论(0)

C++ STL notes

2010-11-25 17:00

exception safe, type safe, thread safe,reentrant

Item1: Memory-contigious, node-based container

Item2: Encapsulation

Item3: An easy way to make copying efficient, correct, and immune to the slicing problem is to create containers of pointers instead of containers of objects.

Item4: Call empty whenever you need to know whether a container has zero elements.

分类:Linux C/C+| 阅读(73)| 评论(0)

Design patterns in C++

2010-11-25 16:58

Factory

AbstractFactory

Builder

Prototype

Singleton

Adapter

Bridge

Composite

Decorator

Proxy

TemplateMethod

ChainofResponsibility

Flyweight

Command

Observer

Strategy

State

Iterator

Memento

Vistor

In C++, the essential of design pattern is

分类:Linux C/C+| 阅读(50)| 评论(0)

diff和patch使用指南

2010-11-01 14:01

diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。

  diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。

  patch能将diff文件运用于 原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。

  因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。

  这就是diff和patch的妙处。下面分别介绍一下两个工具的用法:

分类:Linux C/C+| 阅读(89)| 评论(0)

pthread_create can not use class normal methods directly, but can use static methods. Here is a example:

//g++ -o test test.c -lpthread
#include <iostream>
#include <pthread.h>
using namespace std;
class Testing
{  
private:
      //cLog* m_Log;
      pthread_t tid; // would one suffice?   

分类:Linux C/C+| 阅读(160)| 评论(1)

glibc编译和调试

2010-10-20 16:01

1. SELS 11.1

glibc-2.9-2.8.src.rpm

libsepol-devel-2.0.32-5.38.i586.rpm

libselinux-devel-2.0.71-3.38.i586.rpm

2.安装libsepol-devel,libselinux-devel 和glibc-2.9-2.8.src.rpm

3.rpmbuild -bb glibc.spec

4.编辑/usr/src/packages/BUILD/glibc-2.9中文件,tar xvf glibc-2.9-2008111711.tar.bz2,并cp 到SOURCE目录,修改spec文件重新编译

5.安装新版本glibc

rpm -ivh glibc-2.9-2.8.i586.rpm

分类:Linux C/C+| 阅读(338)| 评论(0)

                 Linux下的多线程编程 
                           本文出自:http://www.china-pub.com 作者: 姚继锋 (2001-08-11 09:05:00) 
1 引言
  线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的 Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。
  为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。
  使用多线程的理由之一是和进程

分类:Linux C/C+| 阅读(98)| 评论(0)

strncpy 
原型:extern char *strncpy(char *dest, char *src, int n);

用法:#include <string.h>

功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。

说明: 
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。 
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。 
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 
返回指向dest的指针。

举例:


// strncpy.c

#include <syslib.h> 
#include <string.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值