2011年11月14日

Linux的多线程编程的高效开发经验

摘要: 背景Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱。我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程编程。我们假设读者都已经很熟悉 Linux 平台上基本的线程编程的 Pthread 库 API 。其他的第三方用以线程编程的库,如 boost,将不会在本文中提及。本文中主要涉及的题材包括线程开发中的线程管理,互斥变量, 阅读全文

posted @ 2011-11-14 16:49 千兵卫博士 阅读(278) 评论(0) 推荐(0) 编辑

pthread_cond_timedwait方法&&Linux时间编程

摘要: 最近开始入手网络编程领域,简单的学习了PThread的几个库方法,然后就开始进项目组学习了。遇到的最大问题就是死锁问题,因为我用的方法是: pthread_cond_wait()和 pthread_cond_signal() 来控制的,有的时候看着明明是对的或者说是单步调试的情况下是正确的,但是一运行就卡住不动了,实在是太郁闷了,这个时候我发现了一个有用的函数:pthread_cond_timedwait (pthread_cond_t * _cond,pthread_mutex_t * _mutex,_const struct timespec * _abstime);这个函数的解释为:比函 阅读全文

posted @ 2011-11-14 16:46 千兵卫博士 阅读(2118) 评论(0) 推荐(1) 编辑

C语言宏定义中的#,##,#@及\符号的作用

摘要: 1、#(stringizing)字符串化操作符 作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定 义中,且必须置于宏定义体中的参数名前。 如: #defineexample(instr)printf("theinputstringis:\t%s\n",#instr) #defineexample1(instr)#instr 当使用该宏定义时: example(abc); 在编译时将会展开成:printf("theinputstringis:\t%s\n","abc"); stringstr= 阅读全文

posted @ 2011-11-14 16:44 千兵卫博士 阅读(7572) 评论(0) 推荐(1) 编辑

C语言中几种输出调试信息的方法

摘要: 在调试程序时,输出调试信息是一种普遍、有效的方法。输出调试信息一般有以下五种方法:方法一:直接使用屏幕打印函数printf。 该方法直接在需要输出调试信息的位置使用函数printf输出相应的调试信息,以及某些关键变量的值。我们通过以下求阶层的函数fact来看看该方法的调试程序过程。#include <stdio.h>int fact(int n){ int i,f=1; for( i=1; i<=n; i++) { f += i; } return f;}int main(){ printf( "4!=%d/n", fact(4) ); return 0; 阅读全文

posted @ 2011-11-14 16:43 千兵卫博士 阅读(2308) 评论(0) 推荐(1) 编辑

Linux shell程序设计知识点总结

摘要: 学习shell程序设计的方法就是:动手 + man command下面脚本全部是在Cygwin下测试的。$ /bin/bash --versionGNU bash, version 2.05b.0(1)-release (i686-pc-cygwin)Copyright (C) 2002 Free Software Foundation, Inc.编写shell脚本程序有两种方式:【1】可以输入一系列命令让shell交互地执行它们。【2】可以把这些命令保存到一个文件中,然后将该文件作为一个程序来调用。Bash常用命令目录:(1) read命令 —— 变量内容由用户决定(2) 重定向输出和输入( 阅读全文

posted @ 2011-11-14 16:42 千兵卫博士 阅读(635) 评论(0) 推荐(1) 编辑

gcc的使用简介与命令行参数说明

摘要: (一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项(一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录。因 为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数(short options),如 -dr 与 -d -r 的含义不一样。gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本 阅读全文

posted @ 2011-11-14 16:40 千兵卫博士 阅读(751) 评论(0) 推荐(0) 编辑

Linux下常用调试技巧

摘要: (一) 有漏洞的程序(二) 代码检查(三) 取样法(四) 使用gdb进行调试(一) 有漏洞的程序view plain/*debug1.c*/typedefstruct{char*data;intkey;}item;itemarray[]={{"bill",3},{"neil",4},{"john",2},{"rick",5},{"alex",1},};voidsort(item*a,intn){inti=0,j=0;ints=1;for(;i<n&&s!=0;i++){s= 阅读全文

posted @ 2011-11-14 16:38 千兵卫博士 阅读(574) 评论(0) 推荐(1) 编辑

make工具 —— make命令和makefile文件

摘要: (1) makefile的语法(2) make命令的选项和参数1、依赖关系2、规则3、makefile文件中的注释4、makefile文件中的宏5、多个目标6、内置规则make工具解决的问题:它会在必要时重新编译所有受改动影响的源文件。注意:make命令不仅仅用于编译程序,无论何时,当需要通过多个输入文件来生成输出文件时,你都可以利用它来完成任务。它的其他用法还包括文档处理。虽然make命令内置了很多智能机制,但光凭其自身是无法了解应该如何建立应用程序的。你必须为其提供一个文件,告诉它应用程序应该如何构造,这个文件称为makefile。makefile文件一般都会和项目的其他源文件放在同一个目 阅读全文

posted @ 2011-11-14 16:36 千兵卫博士 阅读(991) 评论(0) 推荐(0) 编辑

导航