【转载】互斥量和信号量的区别

摘要: 1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源2. 互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程 阅读全文
posted @ 2012-03-15 11:53 菜丝inside 阅读(242) 评论(0) 推荐(0) 编辑

【转载】GNU:gcc和g++区别

摘要: gcc和g++都是GNU(组织)的一个编译器。 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。 2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。 误区二:gcc不会定义__ 阅读全文
posted @ 2012-03-15 11:51 菜丝inside 阅读(308) 评论(0) 推荐(0) 编辑

结合回调函数介绍下泛型函数

摘要: 其实泛型说白了,就是模板。泛型只不过是学称。下述代码通过函数指针演示了回调函数。测试代码中根据传入函数名作为实参,实现不同的函数调用。#ifndef _POINT__H_ #define _POINT__H_ typedef int (*Calc)(int,int); int Sub(int a,int b); int Minus(int a,int b); void MyPointFun(Calc fun,int a,int b); #endif/*_POINT__H_*/ View Code //PointTest.cpp #include "PointTest.h". 阅读全文
posted @ 2012-03-15 11:51 菜丝inside 阅读(361) 评论(0) 推荐(0) 编辑

通过类String看拷贝构造函数,赋值函数的作用和区别

摘要: View Code /*如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式生成自动缺省函数.如果类中含有指针变量,这个缺省函数会带来错误.以类String的两个对象a,b为例,a.m_str内容是"hello",b.m_str的内容为"world".将a赋给b,缺省赋值函数的位拷贝意味着b.m_str=a.m_str,这样会发生如下3个错误:1. b.m_str的原有内存没有释放,造成内存泄露;2. b.m_str和a.m_str指向同一块内存,a或b的任一方变动均会影响到另一方;3. 两个对象被析构时,会造成m_str被析构两次*//*拷 阅读全文
posted @ 2012-03-15 11:38 菜丝inside 阅读(980) 评论(0) 推荐(0) 编辑

【部分转载】C/C++中的联合体union及CPU大小端判定

摘要: 大小端不同会给程序员进行代码移植时带来麻烦,记得之前接手的第一个嵌入式平台的项目就是将工程从X86架构移植到PowerPC架构上,从此走向嵌入式开发的不归路^_^。三年以来,主要涉及到都是嵌入式RTOS应用软件的开发,包括多种硬件接口下的通信,多任务,多块CPU板卡进行同一块资源的互斥访问,多块板卡进行数据采集时的时间不确定性造成采集不同步,大批量数据安全实时通信,多块板卡之间的节拍同步等问题。目前也正开始接触linux操作系统的kernel开发及驱动编写等工作。可以说写此篇blog并且此篇头的感慨,完全是之前一次Atheros面试引起的...在C/C++程序的编写中,当多个基本数据类型或复合 阅读全文
posted @ 2012-03-14 17:04 菜丝inside 阅读(644) 评论(0) 推荐(0) 编辑

设计模式之Singleton

摘要: Singleton是我项目中运用最多的设计模式了,虽然简单,却能大大降低模块耦合性。通过该模式,最多只能创建该类的一个实例。个人理解,Singleton就不再需要别的模块来聚合本模块,其表现形式最大特点就是构造函数的访问权限是private的,由第一个依赖本模块的其它模块进行实例化。笔者一直从事安全软件的研发,会在软件运行初期通过调用各个模块的Init()来实现单例的实现,而这个过程由于在初始化线程中串行执行,也有效避免了多线程下单例的互斥问题。不过下述文章仍会介绍下多线程开发单线程互斥问题。类的声明:View Code //Singleton.hnamespace DP{#ifnde... 阅读全文
posted @ 2012-03-14 16:47 菜丝inside 阅读(277) 评论(0) 推荐(0) 编辑

总结一下类型名定义变量

摘要: 先看两个类的定义class A{ static int struct_cnt;public: A( ) { struct_cnt++; }public: void Print() { printf("A is construced:%d\n",struct_cnt); }};int A::struct_cnt = 0; class B{ static int struct_cnt;public: B(int inpara) { struct_cnt++; }public: void... 阅读全文
posted @ 2012-03-14 13:08 菜丝inside 阅读(239) 评论(0) 推荐(0) 编辑

[转载]模板函数的声明和定义都放在一起

摘要: 一个模板函数,把声明和定义分别放在.h文件和.cpp文件种,如果不调用这个函数的话,编译连接都能通过,但是如果调用这个函数的话,连接就有错误如下: --------------------Configuration: IRSEG - Win32 Release------------------ -- Compiling... Location.cpp Linking... Location.obj : error LNK2001: unresolved external symbol "void __cdecl output_vector(class std::vector< 阅读全文
posted @ 2012-03-14 11:33 菜丝inside 阅读(904) 评论(0) 推荐(0) 编辑

设计模式之Bridge

摘要: 之前写博一直在csdn,但是上面的服务器时好时坏,发文会丢。发现这边园子还不错,因此转到这里来了。第一篇就介绍一下我对Bridge的理解。UML工具使用Enterprise Architect, 工程使用VC2008编译通过。先贴出类的关系:class CProductA继承自class Bridge, 具备其属性pIfc, 该属性是指向CIfOperator(接口)的指针. C++不存在真正意义上的接口, 只是一个纯虚类; 具备GetImp()操作方法用以获得通过接口传过来的实例; 重写(覆盖,override)Attribute().class Br... 阅读全文
posted @ 2012-03-14 11:07 菜丝inside 阅读(206) 评论(0) 推荐(0) 编辑