自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chenglinhust的专栏

分布式系统 基础架构 中间件系统 安全领域 容器技术 人工智能

  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 函数式编程总结

函数式编程总结一、定义简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式:  (1 + 2) * 3 - 4传统的过程式编程,可能这样写:  var

2013-03-31 12:30:22 1340

原创 Linux前后台进程切换

Linux前后台进程切换Shell支持作用控制,有以下命令:1.   command & 让进程在后台运行2.    jobs 显示当前会话的作业状态3.    fg %n 让后台运行的进程n到前台来4.    bg %n 让进程n到后台去注意:上面的n为查看到的进程编号。

2013-03-28 21:22:19 1064

原创 linux中ps命令

linux中ps命令       有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行。由于一个应用程序可能需要启动多个进程。所以在同等情况下,进程的数 量要比程序多的多。为此从阅读方面考虑,管理员需要知道系统中运行的具体程序。要实现这个需求的话,就需要利用命令ps来帮忙。       要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当

2013-03-28 20:05:56 1015

原创 快速找到未知长度单链表的中间节点

快速找到未知长度单链表的中间节点       这是腾讯公司的一道面试题,一看大家会想到一个简单的方法:首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。代码为:      int locate(LinkedList *head)      {           LinkedLis

2013-03-28 17:45:10 1569

原创 Linux的/etc/services文件简析

Linux的/etc/services文件简析/etc/services文件是记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。如图所示:总结:/etc/services文件包含了服务名和端口号之间的映射,很多的系统程序要使用这个

2013-03-28 09:03:06 1413

原创 windows线程调度、线程优先级和亲缘性

windows线程调度、线程优先级和亲缘性每一个线程在它的线程内核对象中有一个上下文结构,反映了线程最后一次执行的 CPU 寄存器状态,每隔大约 20ms(可以使用 GetSystemTimeAdjustment 获得,我测得这个间隔大约为 15.6ms),Windows 在所有当前内核对象中查找可调度线程,并选择一个可调度线程,从这个线程的上下文结构中读取 CPU 寄存器状态

2013-03-27 23:27:57 1457

原创 内存对齐分配策略(含位域模式)

内存对齐分配策略(含位域模式)1:内存对齐定义:     现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际上计算机系统对于基本数据类型在内存中的存放位置都有限制,要求这些数据存储首地址是某个数K的倍数,这样各种基本数据类型在内存冲就是按照一定的规则排列的,而不是一个紧挨着一个排放,这就是内存对齐。对齐模数

2013-03-26 11:49:38 1056

原创 ptr = (char *)malloc(0)

ptr = (char *)malloc(0)char   *ptr;if ((ptr   =   (char   *)malloc(0))   ==   NULL)   puts( "Got   a   null   pointer "); else puts( "Got   a   valid   pointer "); 上面程序在VC6.0下输出结果是

2013-03-26 11:20:10 4489 1

原创 static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别

static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别  C-style cast举例: int i; double d; i = (int) d; 上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生

2013-03-26 09:46:05 817

原创 不用加减乘除运算符计算两数之和及a=b*3

不用加减乘除运算符计算两数之和及a=b*3IT公司的题目如下:1.不用加减乘除运算符计算两个数字之和2.不用加减乘除运算符计算a = b * 3首先这两个题目其实是很相关的,要计算a = b * 3就是计算a = b *2 + b即a = b 。因此只要解决了不用加减乘除运算符计算两个数字之和,那么不用加减乘除运算符计算a = b * 3也就迎刃而解了。那么

2013-03-24 17:29:18 1457

原创 多线程面试题摘选

多线程面试题摘选一. 概念性问答题1. 线程的基本概念,线程的基本状态及状态之间的关系?答:线程是指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。java线程的基本状态:运行,就绪,挂起,结束。2. 线程与进程的区别?答:     1、 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。

2013-03-22 11:18:53 3054

转载 秒杀多线程第十五篇 多线程十大经典案例之一 双线程读写队列数据

秒杀多线程第十五篇 多线程十大经典案例之一 双线程读写队列数据《多线程十大经典案例之一双线程读写队列数据》案例描述:MFC对话框中一个按钮的响应函数实现两个功能:显示数据同时处理数据,因此开两个线程,一个线程显示数据(开了一个定时器,响应WM_TIMER消息按照一定时间间隔向TeeChart图表添加数据并显示)同时在队列队尾添加数据,另一个线程从该队列队头去

2013-03-22 11:01:30 2207

转载 秒杀多线程第十四篇 关键段,事件,互斥量,信号量的“遗弃”问题

秒杀多线程第十四篇 关键段,事件,互斥量,信号量的“遗弃”问题在《秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量》中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段、事件、互斥量、信号量进行了总结。有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题。因此本文将对事件和信号量作个试验,

2013-03-22 10:29:21 1160

转载 秒杀多线程第十二篇 多线程同步内功心法——PV操作上

秒杀多线程第十二篇 多线程同步内功心法——PV操作上前面的文章讲解了在Windows系统下实现多线程同步互斥的方法,为了提高在实际问题中分析和思考多个线程之间同步互斥问题的能力,接下来将讲解PV操作,这也是操作系统中的重点和难点。本文将会先简要介绍下PV操作的来源和基本使用方法,然后再通过两道经典的计算机考研真题——放水果和安全岛来示范如何运用PV操作。 先讲讲

2013-03-22 09:56:11 1004

原创 qemu-kvm savevm/loadvm 流程

qemu-kvm savevm/loadvm 流程1. 流程:1)测试设备是否支持snapshot保存2)停止虚拟机3)保存虚拟机状态4)创建快照5)恢复虚拟机2. 函数调用:1) 入口函数     do_savevm()2) 函数调用:1) bdrv_snapsho

2013-03-21 20:52:41 4430

原创 qemu中添加新命令helloworld

qemu中添加新命令helloworld介绍: 很多 虚拟化开发者和系统架构师 需要在qemu 中添加新的功能,比如 post-copy migrate(后迁移模式)。处于兼容性和稳定性的考虑,添加新命令来封装这些功能比较合适。本文介绍了在qemu代码里如何添加新命令 helloworld。 注意:本文讲的是添加qemu交互界

2013-03-21 20:29:50 2008

原创 char str[] 和 char *str 的区别

char str[] 和 char *str 的区别[cpp] view plaincopychar* get_str(void)  {      char str[] = {"abcd"};      return str;  }         char str[] = {"abcd"};定义了一个局部字符

2013-03-21 14:40:39 863

原创 在QEMU中添加新的QMP命令

在QEMU中添加新的QMP命令QMP(就是QEMU Monitor Protocol)命令由结构mon_cmd_t定义,该结构在monitor.c的开头被定义。注意查看它的成员以及该结构上面的注释。为了添加新的QMP命令,需要修改qemu-monitor.hx注意查看最开始的说明:DEFHEADING() 用于在help text和texi中增加标题头处

2013-03-18 17:12:58 2452

原创 关于《C语言深度剖析》之编译器的bug问题

关于《C语言深度剖析》之编译器的bug问题编译器的bug?另外一个有意思的现象,在Visual C++ 6.0调试如下代码的时候却又发现一个古怪的问题:int *p = (int *)0x12ff7c;*p = NULL;p = NULL;在执行完第二条代码之后,发现p 的值变为0x00000000 了。按照我么上一节的解释,应该p的值不

2013-03-18 10:48:52 1432 1

转载 秒杀多线程第十一篇 读者写者问题续 读写锁SRWLock

秒杀多线程第十一篇 读者写者问题续  读写锁SRWLock     在前一篇文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题。问题虽然得到了解决,但代码有点复杂。本篇将介绍一种新方法——读写锁SRWLock来解决这一问题。读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程)。对于读取者线程,读写锁会允许他们并发的执行

2013-03-17 11:48:16 1232

转载 秒杀多线程第十篇 读者写者问题

秒杀多线程第十篇 读者写者问题与上一篇生产者消费者问题一样,读者写者也是一个非常著名的同步问题。读者写者问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。上面是读者写者问题示意图,类似于生产者消费者问题的分析过程,首先来找找哪些是属于“等待”情况。第一.写者要等

2013-03-17 11:29:19 983

原创 《c语言深度剖析》第一章笔记

《c语言深度剖析》第一章笔记1.break 跳出当前循环 ,continue 结束当前循环,开始下一轮循环break 关键字很重要,表示终止本层循环。现在这个例子只有一层循环,当代码执行到break 时,循环便终止。如果把break 换成continue 会是什么样子呢?continue 表示终止本次(本轮)循环。当代码执行到continue 时,本

2013-03-16 17:05:52 962

原创 C语言中volatile和const在一起使用注意之处

C语言中volatile和const在一起使用注意之处const和volatile放在一起的意义在于:(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。“volatile”的含

2013-03-16 15:41:13 1868

转载 秒杀多线程第九篇 生产者消费者问题

秒杀多线程第九篇 生产者消费者问题     继前面经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显

2013-03-16 11:28:56 1082

转载 秒杀多线程第八篇 经典线程同步总结 关键段 事件 互斥量 信号量

秒杀多线程第八篇 经典线程同步总结 关键段 事件 互斥量 信号量之前详细介绍了常用的线程同步互斥机制——关键段、事件、互斥量、信号量。下面对它们作个总结,帮助大家梳理各个知识点。 首先来看下关于线程同步互斥的概念性的知识,相信大家通过前面的文章,已经对线程同步互斥有一定的认识了,也能模糊的说出线程同步互斥的各种概念性知识,下面再列出从《计算机操作系统》一书中选取

2013-03-16 10:18:28 957

转载 秒杀多线程第七篇 经典线程同步 信号量Semaphore

秒杀多线程第七篇 经典线程同步 信号量Semaphore前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介绍用信号量Semaphore来解决这个问题。首先也来看看如何使用信号量,信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信

2013-03-16 10:03:57 995

转载 秒杀多线程第六篇 经典线程同步 互斥量Mutex

秒杀多线程第六篇 经典线程同步 互斥量Mutex前面介绍了关键段CS、事件Event在经典线程同步问题中的使用。本篇介绍用互斥量Mutex来解决这个问题。互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问。互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源。使用互斥量Mutex主要将用到四个函数。下面是这些函数的原型和使用说明。

2013-03-16 09:12:29 951

转载 秒杀多线程第五篇 经典线程同步 事件Event

秒杀多线程第五篇 经典线程同步 事件Event上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。 第一个 CreateEvent

2013-03-15 13:57:03 1177

转载 秒杀多线程第四篇 经典线程同步 关键段CS

秒杀多线程第四篇 经典线程同步 关键段CS上一篇提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。 函数功能:初始化

2013-03-15 13:15:13 939

转载 秒杀多线程第三篇 一个经典的多线程同步问题

秒杀多线程第三篇 一个经典的多线程同步问题上一篇介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。 程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) -

2013-03-15 11:14:18 841

转载 秒杀多线程第二篇 原子操作 Interlocked系列函数

秒杀多线程第二篇 原子操作 Interlocked系列函数上一篇《 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个

2013-03-15 11:08:29 1119

转载 秒杀多线程第一篇 CreateThread与_beginthreadex本质区别

秒杀多线程第一篇 CreateThread与_beginthreadex本质区别   本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_b

2013-03-15 10:40:22 1090

原创 内核对象

内核对象  1 什么是内核对象     内核对象是内核分配的一段空间,如文件对象和进程对象等。可以用Windows提供的函数来创建相应的内核对象。创建成功后返回一个对象句柄,并且对象句柄值是进程相关的。程序不能直接操作内核对象,只能通过Windows提供的函数来控制。1.1内核对象的使用计数     内核对象可以被多个进程同时使用,句柄值通常会不一样,但是引用的

2013-03-14 23:15:40 1190

原创 linux中syscall系统调用

linux中syscall系统调用     在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37。不同的Linux版本其中的实现略有不同。     在一些应用中我们可以看到下面的一些定义:#define real_read(fd, buf, count ) (sysca

2013-03-14 19:39:38 2648

原创 do...while(0)的妙用

do...while(0)的妙用在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。但是我发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句通

2013-03-14 19:37:27 756

原创 linux中利用/proc/interrupts 和 /proc/stat 查看中断的情况

linux中利用/proc/interrupts 和 /proc/stat 查看中断的情况在/proc文件系统下,有两个文件提供了中断的信息。/proc/interrupts 文件中列出当前系统使用的中断的情况,所以某个中断处理没有安装,是不会显示的。哪怕之前安装过,被卸载了。从左到右分别是:irq的序号, 在各自cpu上发生中断的次数,可编程中断控制器

2013-03-14 09:24:02 8477

原创 linux内核中的BUG 和 BUG_ON

linux内核中的BUG 和 BUG_ON在内核代码中,经常会看到一些调试函数,如BUG,BUG_ON等。使用前,先在内核配置中把kernel debug选上:make menuconfig:kernel hacking-->kernel debug 作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BU

2013-03-13 11:11:55 4892

原创 linux内核中一些关键词讲解

linux内核中一些关键词讲解asmlinkage/FASTCALL()/fastcall这三个宏指定了函数参数的传递方式。asmlinkage修饰的函数,其参数通过堆栈传递。FASTCALL()/fastcall,此二者实际上是一样的作用。在Intel i386架构中,它们所修饰的函数,其前三个参数分别通过通用寄存器EAX,ECX和EDX来传递。它们定义于includ

2013-03-13 11:06:51 1238

原创 解读PTR_ERR,ERR_PTR,IS_ERR

解读PTR_ERR,ERR_PTR,IS_ERR       在看内核代码时遇到几个宏PTR_ERR,ERR_PTR,IS_ERR(其实是内联函数),通过阅读内核源码,知道了这几个宏的定义,下面就说一下这几个宏的由来与用处。        我们知道内核有些函数是返回指针的,如Kmalloc分配内存,如果分配不到内核就会返回NULL指针,这样我们可以通过判断是否是NULL指针来判断K

2013-03-13 09:01:47 1006

原创 linux获取线程号

linux获取线程号项目中寻找bug经常会用到gettid(),来获取线程号,判断问题出在哪个线程里面。对于gettid先来man一下。GETTID(2)                  Linux Programmer's Manual                 GETTID(2)NAME       gettid - get thread identific

2013-03-12 09:53:24 3191

走向分布式基础学习

是学习分布式的好资料,里面的内容讲解的非常详细,是一个台湾人下载的

2015-03-22

空空如也

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

TA关注的人

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