随笔 - 68  文章 - 0 评论 - 41 阅读 - 56万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

05 2013 档案
关于异步取消线程以及异步销毁锁的探讨
摘要:最近在研究如何实现一个线程池。具体线程池的实现不是我想说的重点,而是关于线程的一些操作问题。先说一下我的每个工作线程都有一个自己对应的锁,而且锁只在线程自身使用。(这方便下面的理解)一、线程的异步取消的问题我的线程池对外提供两个函数,create_threadpool()和destroy_threadpool()用来创建和销毁线程池,创建的过程是初始化工作线程→初始化管理线程→….工作,销毁的过程是销毁管理线程→销毁工作线程→……工作。在这两个过程中遇到的第一个问题是如何取消线程。目前我搜集到的有3种方法:1.通过pthread_kill()函数发送SIGQUIT信号2.通过pthread_c 阅读全文
posted @ 2013-05-29 16:58 曾经的你| 阅读(4304) 评论(0) 推荐(0) 编辑
浅析pthread_cond_wait(转)
摘要:转自http://weihe6666.iteye.com/blog/1170141条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 一 pthread_cond_wait定义:函数原型:int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) 参数: cond 条件变量 mutex 互斥锁第一个参数*cond是指 阅读全文
posted @ 2013-05-16 12:56 曾经的你| 阅读(6141) 评论(0) 推荐(0) 编辑
pthread_mutex_init & 互斥锁pthread_mutex_t的使用(转)
摘要:1. 互斥锁创建 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIAL... 阅读全文
posted @ 2013-05-16 11:52 曾经的你| 阅读(12220) 评论(0) 推荐(0) 编辑
CppUTest的简单用法
摘要:最近学习如何进行单元测试,于是研究了一下CppUTest的用法,虽然这工具经常被推荐,但奇怪的是网上资料缺比较少,可能是因为太简单了的原因吧,先记录下来给自己看。1.下载CppUTest2.Linux常用安装三板斧./configure --prefix=目录makemake install3.使用CppUTest上有一个如何开始的说明先编写一个cpp文件 1 /*注意,这个头文件必须包含,不然编译就报错,比较坑的是官网并没说要添加这个*/ 2 #include "CppUTest/UtestMacros.h" 3 4 TEST_GROUP(FirstTestGroup) 阅读全文
posted @ 2013-05-16 08:12 曾经的你| 阅读(7492) 评论(6) 推荐(0) 编辑
C语言中隐藏结构体定义的方法
摘要:C语言编程中,常常需要返回一些句柄,而这些句柄就是一些结构体,此时我指望外部的人调用我们的函数,传入指定的句柄进行操作,这样外部人就不会破坏句柄结构体中的信息,还可以完成指定操作的目的。方法就是讲结构体的定义在.c文件中1 xxx.c2 3 struct xxxx{4 xxxx;5 xxxxx; 6 };然后在.h文件中1 xxx.h2 3 typedef struct xxxx abcd;这样外部人员可以指定声明结构体或者结构体的指针,而无法改动结构体里的数据。 阅读全文
posted @ 2013-05-15 13:15 曾经的你| 阅读(882) 评论(0) 推荐(0) 编辑
static函数的思考
摘要:关于static关键字应用到函数上的文章网上比比皆是,但我一直不太能完全理解,我一直觉得只要函数不声明在头文件中,即使不是静态,别的文件也无法采用。但最近看到网上的一个例子。1 char a = 'A'; // global variable2 void msg() 3 {4 printf("Hello\n"); 5 }1 int main(void)2 { 3 extern char a; // extern variable must be declared before use4 printf("%c ", a);5 (void)m 阅读全文
posted @ 2013-05-15 08:50 曾经的你| 阅读(221) 评论(0) 推荐(0) 编辑
Framebuffer的简单应用
摘要:网上可以直接搜到应用Framebuffer画图的示例程序,但是他们大多是一样,估计是早期的一份程序散播的。然而如果需要写入字符则大多没有示例。最近我就研究一下如何直接操作Framebuffer绘制字符串。简单操作Framebuffer分为几个步骤1.打开framebuffer设备,一般是/dev/fb02.使用ioctl读取fb_var_screeninfo和fb_fix_screeninfon两个结构体信息。fb_var_screeninfo和fb_fix_screeninfon可以看我摘录的嵌入式开发板Framebuffer的原理3.使用mmap函数映射内存4.直接对内存进行操作,内存中每 阅读全文
posted @ 2013-05-13 12:47 曾经的你| 阅读(3386) 评论(2) 推荐(0) 编辑
嵌入式开发板Framebuffer的原理
摘要:摘自http://bbs.chinaunix.net/thread-1932291-1-1.html Framebuffer的配置及应用 *一、FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linu... 阅读全文
posted @ 2013-05-13 12:13 曾经的你| 阅读(2707) 评论(0) 推荐(0) 编辑
Shell脚本监控某个进程是否在运行
摘要:写一个Shell脚本检测某个进程是否在运行 1 #!/bin/sh 2 3 CMD=pgrep 4 #进程名 5 PPROC=test 6 #循环,为了让脚本一直运行监控 7 while : 8 do 9 if [ -n "`$CMD $PPROC`" ]10 then echo "test is ok"11 else12 echo "test is killed"13 fi14 # 每次监测时间60秒15 sleep 6016 done这样就起到了一个守护进程的作用,一旦发现某个进程不运行了,就可以重启启动。 阅读全文
posted @ 2013-05-11 13:01 曾经的你| 阅读(6832) 评论(0) 推荐(0) 编辑
Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
摘要:在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下。c_cc[VTIME]和c_cc[VMIN]映像read函数的返回。VTIME定义等待的时间,单位是百毫秒(通常是一个8位的unsigned char变量,取值不能大于cc_t)。VMIN定义了要求等待的最小字节数,这个字节数可能是0。如果VTIME取0,VMIN定义了要求等待读取的最小字节数。函数read()只有在读取了VMIN个字节的数据或者收到一个信号的时候才返回。如果VMIN取0,VTIME定义了即使没有数据可以读取,read()函数返回前也要等待几百毫秒的时间量。这时,read()函数不需要像其通常情况那 阅读全文
posted @ 2013-05-10 15:13 曾经的你| 阅读(1560) 评论(0) 推荐(0) 编辑
为函数的参数分配内存空间
摘要:1 void fun(char* c)2 {3 4 c = new int[10];5 6 }使用这个函数为参数c分配空间,但是实际上事与愿违,传递给fun的参数在外部未获得分配的空间。要想达到此目的,需要使用指针的指针或者指针的引用。1 void fun(char** c)2 {3 4 *c = new int[10];5 6 }1 void fun(char*& c)2 {3 4 c = new int[10];5 6 }原因:不管是传递的变量还是指针,都是按值传递,传递给函数的都是另一份拷贝,只不过变量时传递的变量自身,而指针是传递的这个指针自身的一份拷贝。所以可以改变指针指.. 阅读全文
posted @ 2013-05-09 15:01 曾经的你| 阅读(348) 评论(0) 推荐(0) 编辑
Emacs快捷键学习(未完待续)
摘要:C-就代表CTRL键,M-就代表ALT键虽然这些按键都可以用方向键和PageUp和PageDown按键代替,但是(1)它们在任何键盘上都能用。(2)当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地适应其它更高级的光标移动命令。移动到屏幕中央C-l,当前行居于屏幕中央,并且光标移动到屏幕中央上下左右的移动 上一行 C-p : : 向左移 C-b .... 目前光标位置 .... 向右移 C-f : : 下一行 C-nP B F N分别代表p(previous),b(backward),f(for 阅读全文
posted @ 2013-05-09 09:18 曾经的你| 阅读(371) 评论(0) 推荐(0) 编辑
linux监控程序-程序自动重启方法(转)
摘要:转自:http://www.cnblogs.com/zhy113/archive/2013/03/15/2960910.html家在写server的时候,不管server写的是多么健壮,还是经常出现core dump等程序异常退出的,但是一般情况下需要在无人为干预情况下,能够自动重新启动,保证server程序能够服务用户。这时就需要一个监控程序来实现 能够让程序自动重新启动,现在笔者在写portmap就遇到了这个问题,通过网上查找资料,找到了一个相对靠谱的exec+fork解决方法。使用脚本实现自动重启首先想到的最简单的使用shell脚本,大概思路:ps -ef | grep “$1″ | g 阅读全文
posted @ 2013-05-06 11:07 曾经的你| 阅读(3861) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示