huyc

导航

2012年12月18日 #

Linux避免死锁的一些机制

摘要: 死锁应该有3个原因:1.独占资源2.循环等待3.不可剥夺网上看到的4个条件,实际上还是3个,因为请求和等待导致的死锁毕竟有点让人难堪,实际上的死锁多是因为请求等待导致的循环等待。在用户态,由于Linux提倡进程之间的公平,线程之间甚至没有优先级之分,每个进程/线程都会有机会执行,所以不会出现那种高优先级进程/线程抢占低优先级之后,由于低优先级进程/线程的等待导致的死锁,所以用户态还不需要关心这样的问题。用户态遇到的死锁主要是循环等待,退几步来说,可能就是在临界区sleep的死锁了,查这种死锁很简单,为锁添加计数值就可以。此外,之前提到pthread_mutex_t是具有优先级的,一个优先级比锁 阅读全文

posted @ 2012-12-18 17:24 huyc 阅读(6107) 评论(0) 推荐(0) 编辑

2012年11月27日 #

Linux Virtual Machines

摘要: 看内核资料的时候,发现了一个内核级别的虚拟机,这个看起来非常不错的样子,由于我自己用的是kubuntu,所以我在ubuntu的主页找到了相关资料,share一下,这个东西各个发行版看起来是不同的。官网地址为:http://xen.org/,虽然提供相关源码,但还是需要内核选项支持,对于不懂细节的我等低手,还是退散为好,以下权且对ubuntu主页的那个做一个简要介绍,经测试,ubuntu主页的帮助也没有做到与时俱进,我就只说当前12.04支持的操作了。首先,很明显当然是安装,ubuntu内部已经加入了依赖关系,直接安装就好:sudo apt-get install xen-hypervisor- 阅读全文

posted @ 2012-11-27 15:20 huyc 阅读(300) 评论(0) 推荐(0) 编辑

2012年11月26日 #

ioctlsocket封装

摘要: 遇到一些重口味的客户,非得要求所有平台上按Windows API封装函数,记下备忘。根据MSDN,Windows似乎很不愿意支持ioctl和fcntl,专门弄进来一个ioctlsocket,传递的三个命令分别是FIONBIO用于设置阻塞属性,FIONREAD用于读取缓冲区未读字节数,SIOCATMARK用来测试TCP的紧急指针,网上一搜,发现Linux上也是有对应的这三个cmd,一些人甚至将这三个命令视为套接字常用命令,对于我这样的标准拥护者,就查了一下POSIX标准,发现:FIONREAD这个是文件的通用操作,用来获取可读字节,归属于ioctl函数的命令FIONBIO已经被fcntl(fd, 阅读全文

posted @ 2012-11-26 17:09 huyc 阅读(532) 评论(0) 推荐(0) 编辑

2012年11月25日 #

锁与信号量

摘要: 本文提到的是posix的互斥锁和信号量。最近测试了pthread_mutex_t和sem_t的性能,发现这两个东西并不存在什么关联,深层次的差别非常明显,具体来说,有以下几个地方:1.pthread_mutex_lock/unlock操作与sem_wait/post操作,在循环测试中,前者时间大约是后者的2倍,循环越大,差距越小,但总是存在的。2.pthread_mutex_lock/unlock文档里边明确提到,它们的错误码不包括EINTR,也就是说不会被信号打断,内部要么重启了系统调用,要么根本没有调用系统调用,或者直接屏蔽了信号;sem_wait/post则可以返回EINTR,这起码说明 阅读全文

posted @ 2012-11-25 17:41 huyc 阅读(1474) 评论(0) 推荐(0) 编辑

2012年11月24日 #

KDE的若干快捷键,备忘

摘要: 1.卷屏,ON/OFF,C-F2/C-F12.显示桌面,这个跟WIN的又不一样,桌面临时置顶,并不会把所有程序最小化,C-F123.显示程序,类似Gnome3里边SUPER-W的那种显示方式,C-F7/C-F9/C-F104.切换桌面,C-F8/C-F115.程序启动器,类似Win里边WIN+R的效果,所不同的是这个启动器会自己搜索PATH里面的可执行文件,A-F26.右键K按钮,编辑程序,可以为任意程序设置启动快捷键和启动参数7.文件浏览器里面按F4是可以打开终端的,按F3是可以像VIM那样分屏显示的,按F11可以随时去掉文件信息框的8.按A-F4可以向当前的GUI进程发送TERM信号,但不 阅读全文

posted @ 2012-11-24 14:07 huyc 阅读(3481) 评论(0) 推荐(0) 编辑

2012年10月26日 #

基于Linux 2.6内核ALSA架构的PCM混音demo

摘要: 一个混音例程,多声道混音成单声道,录制下了原始声音和混音之后的声音。混音之后的声音是8kHz,16bit,带符号单声道的声音。#define ALSA_PCM_NEW_HW_PARAMS_API#include <alsa/asoundlib.h>#include <alloca.h>#include <stdio.h>void mixchannel(FILE *fp, const snd_pcm_channel_area_t *areas, unsigned int chs, snd_pcm_uframes_t offset, snd_pcm_uframe 阅读全文

posted @ 2012-10-26 16:44 huyc 阅读(6022) 评论(0) 推荐(0) 编辑

长度可变的C语言宏

摘要: 在上大学的时候,对printf就有非常困惑的疑问,因为它的原型是这样的:int printf(const char *fmt, ...);现在则需要另外一个类似的东西:长度可变的宏定义以下是两种方案,clang和gcc均测试通过。CASE 1:ISO c99标准里边定义了一个预处理宏__VA_ARGS__,可以像这样来定义一个println:#define println(fmt, ...) printf(fmt"\n", __VA_ARGS__)println("%d", 1);println("%d", 2);这个宏的麻烦之处在于 阅读全文

posted @ 2012-10-26 16:28 huyc 阅读(553) 评论(0) 推荐(0) 编辑

2012年5月27日 #

字符串搜索的自动机

摘要: 用于字符串搜索的自动机实现,调用MachineCreate创建一个状态机,然后将字符流送入MachineCheck即可,代码实现:typedef void *StateMac_t;typedef struct { char c; int *map;}StateTable;typedef struct { int lastState; int curState; int tabSize; StateTable table[0];} MachineState;static int FitchUniqueList(char *buf, const char *st... 阅读全文

posted @ 2012-05-27 14:35 huyc 阅读(306) 评论(0) 推荐(0) 编辑

2011年12月27日 #

time(7)

摘要: TIME(7) 2009-02-10NAME time —— 时间和定时器概述DESCRIPTION实际时间和进程时间实际时间定义为相对于某些固定点所测定的时间。可能相对于过去的一个基准点(参见下面的纪元时间和日历时间描述),或相对于一些进程活跃其间的点(比如进程开始时)。进程时间定义为进程占用的CPU时间量。有时还细分为用户和系统两个部分。用户CPU时间是用户模式下执行代码耗费的时间,系统CPU时间是指系统模式下内核代表进程执行所花费的时间(如执行系统调用)。time(1)命令可以用于确定程序执行耗费的CPU时间量。一个程序可以使用times(2),getrusage(2)或clock(3) 阅读全文

posted @ 2011-12-27 16:46 huyc 阅读(2773) 评论(0) 推荐(1) 编辑

2011年12月24日 #

pcap(3)

摘要: PCAP(3PCAP)NAME pcap —— 数据包抓取库SYNOPSIS#include <pcap/pcap.h>DESCRIPTION数据包抓取库提供数据包抓取系统的高层接口。所有网络上的数据包,即便他们目标是其他主机,也能通过此机制访问到。它还支持将抓取的数据包保存到“savefile”,并可以从这个“savefile”读取出来。调用pcap_create()可以为一个活动的抓取器打开一个句柄,为其设置适当的选项并调用pcap_activate()激活它。调用pcap_open_offline()可以打开并获取存有离线数据的“savefile”文件的句柄。pcap_cre 阅读全文

posted @ 2011-12-24 22:25 huyc 阅读(5510) 评论(0) 推荐(1) 编辑