自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辉仔 の专栏

sharing changes the world

  • 博客(26)
  • 资源 (3)
  • 收藏
  • 关注

原创 linux 多线程编程 互斥锁与条件变量

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待 “ 条件变量的条件成立” 而挂起,另一个线程使 “条件成立 ”(给出条件成立信号),为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。下面这个例子展示的是互斥锁和条件变量的结合使用,以及取消对于条件等待动作的影响,例子中有两个线程被启动,并等待同一个条件变量。#include#include

2012-05-26 15:28:45 2461

原创 linux 多线程编程 Thread Specific Data (TSD)

在单线程程序中,我们经常使用 “全局变量” 以实现多个函数间共享数据,在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共享。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的方法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由POSIX线程库维护,称为线

2012-05-25 21:33:24 4177

原创 tcp/ip中的 ip字符串转整数函数 inet_aton 源代码

// ip地址结构体struct in_addr{ unsigned int s_addr; // network byte order( big-endian)};// inet_aton将 点分十进制串cp 转换为一个网络字节顺序的32位整数 IP地址// 例如将串cp "192.168.33.123 "// 转为 1100 0000 1010 1000 0010 0

2012-05-24 15:54:19 6545 4

转载 linux 文件描述符表 打开文件表 inode vnode

在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,否则文件

2012-05-23 16:13:45 14131

转载 C语言 控制转移 异常处理机制 setjmp & longjmp

C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大)。另外,C语言标准中还提供一种非局部跳转“no-local goto",其通过标准库中的两个标准函数setjmp和longjmp来实现。C标准库下面是K&R的《C程序设计语言(第2版 . 新版)》第232页给出的关于标准库的说明

2012-05-22 10:10:31 1487

转载 intel汇编 和 AT&T汇编 的区别

AT&T与Intel汇编语言的比较我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事情都发源于Unix。就Linux所使用的386汇编语言而言,它也是起源于Unix。Unix最初是为PDP-11开发的,曾先后被移植到VAX及68000系列的处理器上,这些处理器上的汇编语言都采用的是AT&T的指令格式。当Unix被移植到i386时,自然也就采用了AT&T的汇编

2012-05-17 13:03:38 9564

原创 百度笔试题:负数在前 正数在后(奇数在前,偶数在后)

百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。百度面试题(二),给定一个存放正数的数组,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。分析:以上两个面试题本质是

2012-05-15 11:15:21 6647 18

原创 关于构造函数 和 析构函数 能否抛出异常的讨论

构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的对象和已分配的内存。在对象生死攸关的地方,如果程序代码出现问题,常常会发生内存泄漏,从而产生可能危害系统运行的孤魂野鬼。大量的事实表明,业务逻辑代码写得非常严谨

2012-05-14 18:08:27 2627

原创 C语言 实现 面向对象编程 OOC

最近百度面试过程中有同学被问到这样一个问题:如何用C语言实现面向对象?我们都知道面向对象的三大基本特征:封装、继承和多态,C++语言和编译器都对这些特征有着强有力的支持,但是对于C这样的函数式语言,如何实现面向对象?引用一句话:面向对象从来都是思想,而不是语言! 理解面向对象的编程思想,我们使用C语言这样的较低级的语言也同样可以实现OOP,里面具体用到的有C语言中的宏,结构体,函数指针, 聚合

2012-05-14 11:29:47 13145 1

转载 CPU 实模式 保护模式 和虚拟8086模式

从80386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不

2012-05-14 09:59:59 12411 5

转载 UDP实现可靠数据传输

UDP没有Delievery   Garuantee,也没有顺序保证,所以如果你要求你的数据发送与接受既要高效,又要保证有序,收包确认等,你就需要在UDP协议上构建自己的协议。比如RTCP,RTP协议就是在UPD协议之上专门为H.323协议簇上的IP电话设计的一种介于传输层和应用层之间的协议。下面分别介绍三种使用UDP进行可靠数据传输的协议RUDPRTPUDTR

2012-05-11 16:37:15 42146 2

原创 服务器 负载均衡 load balance

负载均衡概念负载均衡( Load Balance LB )建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡有两方面的含义:首先,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,这就是我们常说的集群(cl

2012-05-11 12:33:55 4760

转载 session 与 cookie

一、cookie机制和session机制的区别*************************************************************************************具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存

2012-05-11 10:20:03 1070

原创 linux下的POSIX C 多线程编程 helloworld

#include#include#include#include#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number = 0;int i;void* thread1( void *param ){ printf( "thread1: I'm thread 1\n " );

2012-05-08 11:17:19 2096

原创 java垃圾回收 GC算法

在java和c#语言中,使用的是托管代码,不像c++语言那样由程序员进行内存的手动分配和回收,java语言则由JVM即Java虚拟机 全权负责堆内存的管理,这样子大大减少了程序员的负担,同时一定程度上提高了开发效率和系统稳定性,而常用的GC垃圾回收算法有哪些呢?Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立

2012-05-07 19:57:24 5639

原创 面向接口编程

面向接口编程在Java设计中非常普遍,经常会配合一些经典的设计模式来做系统架构,最近面试百度时被问到面向接口编程的问题,自己在网上搜集了一些资料,没有经过整理,希望对大家的理解有帮助~~链接如下:http://baike.baidu.com/view/2493204.htmhttp://www.cnblogs.com/leoo2sk/archive/2008/04/10

2012-05-07 19:29:20 1044

原创 linux 进程通信 IPC

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义

2012-05-04 11:08:05 1428

转载 linux进程及进程控制

Linux进程控制  程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序切换到另一个进程去运行。因此实际上对于具体单个CPU的机器来说某一个时刻只能运行一个进程。但由

2012-05-04 09:19:06 10943 1

转载 linux下的 fork vfork和clone函数

Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运行的程序文件。    复制的API包括三种:fork、clone、vfork。    这三个API的内部实际都是调用一个内核内部函数do_fork,只是填写的参数不同而已。    vfork,其实就是fork的部分过程,用以简化并提高效率。

2012-05-03 21:29:51 6673 1

转载 Linux中的 僵尸进程 和 孤儿进程

在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。操作系统内核以进程标识符(Process Identifier,即PID)来识别进程。进程0是系统引导时创

2012-05-03 20:50:36 7404

转载 LRU算法

LRU 即:Least Recently Used 最近最少使用算法 关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。而内存的虚拟存储管理,是现在最通用,最成功的方式——在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所

2012-05-03 19:58:55 1442

转载 浅谈 磁盘调度算法

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:先来先服务算法(FCFS),最短寻道时间优先算法(SSTF),扫描算法(SCAN),循环扫描算法(CSCAN) 例:假定某磁盘共有200个柱面,编号为0

2012-05-03 19:42:16 30913 1

原创 数据库索引的实现原理

强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1说白了,索引问题就是一个查找问题。。。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在

2012-05-03 17:05:56 290659 34

转载 【转】地址重定位:静态重定位和动态重定位

地址重定位就是操作系统将逻辑地址转变为物理地址的过程。。。也就是对目标程序中的指令和数据进行修改的过程将逻辑地址空间重定位到物理地址空间的时机有三种:  1、程序编译连接时。  2、程序装入内存时。  3、程序执行时。以下内容转自:http://bbs.pediy.com/showthread.php?t=76876  在这之前我一直对地

2012-05-03 15:42:36 17965 4

原创 操作系统内存管理之 内部碎片vs外部碎片

“碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于分 配方法决定内存碎片是否是一个问题,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色。internal fragmentation:when memory allocated

2012-05-03 10:04:19 37852 2

原创 TCP协议之TIME_WAIT状态

主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。    TIM

2012-05-02 21:47:22 1192

彻底搞定C指针 pdf文件

《彻底搞定C指针》是互联网上下载次数最多的针对C指针问题的中文资源之一。现在,经由修订者的重新修订、编辑与排版,本书的《完全版·修订增补版》全新登场。新版本中的技术用语更加清楚严谨,行文的结构层次更加分明,例子中的程序代码均通过编译以测试其精准性。修订者希望这份新的成果能够令各位读者在C编程方面获得更多的益处,同时也期待着读者们宝贵的反馈信息。

2011-01-04

matcom+4.5

mathtools公式提供的工具,用于matlab 和c++的混合编程,它是个第三方控件,很小(8M多),使用该工具可以将m脚本文件和m函数转化成相同功能的C\C++文件,相比其它方法使用matcom具有如下优点: 转换过程简单(由matcom工具自动实现),容易实现; 可以方便的生成动态链接库文件(dll)和可执行文件(exe); 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; 设置环境后,可以使用Matlab的工具箱函数;

2010-12-30

opencv camshift

关于camshift 算法的应用和相关理论基础,有关色彩空间的描述

2010-05-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除