您的位置:首页 > 其它

函数可重入性及编写规范

2013-10-08 10:38 211 查看
一、可重入函数

1)什么是可重入性?

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

2)可重入函数:

不为连续的调用持有静态数据。

不返回指向静态数据的指针;所有数据都由函数的调用者提供。

使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。

如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

绝不调用任何不可重入函数。

3)不可重入函数:

函数中使用了静态变量,无论是全局静态变量还是局部静态变量。
阅读全文>>

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


Implicitly sharing
V.S explicitly sharing

2011-02-15 16:44

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 in
class method

2010-10-27 15:43

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下的多线程编程(pthread)

2010-09-26 23:22

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)


memcpy和strncpy两个函数用法

2010-09-15 13:12

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: