文档章节

杂谈Linux编程(三)

ChenQi
 ChenQi
发布于 2012/05/03 14:08
字数 753
阅读 41
收藏 0

1. The Cancellation state of a thread
=> asynchronous cancelable
=> synchronous cancelable
=> uncancelable

During normal operation, it is a good idea not to use thread cancellation to end the execution of a thread. A better strategy

would be to indicate to the thread that it should exit and wait for the thread to exit on its own in an orderly fasion.

如果在某几个操作间,该thread一定不能被cancel,则将这几个操作成为critical area,用pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,

&old_cancel_state); pthread_setcancelstate(old_cancel_state, NULL);来保护起来。

 

2. Thread-Specific Data

Global Data (共享的数据,由于share一个进程地址,可以为所有线程访问)
Thread-Specific Data (共享概念的独有数据和资源,每个线程有一个独立拷贝,但是它们共享一个key。通常是线程中概念相近但必须独立操作

的资源和数据。比如线程的log file)
Local Data (独有的数据,在线程的stack中)


3. Makefile
makefile中的clean要如下写:
distclean:
        -find . -name "*.o" -exec rm {} \;
        -find . -name "*.orig" -exec rm {} \;
        -find . -name "*.swp" -exec rm {} \;
        -find . -name "*.*~" -exec rm {} \;
        -find . -name "*~" -exec rm {} \;
        -find . -name "*.d" -exec rm {} \;
        -find . -name "*.a" -exec rm {} \;
        -find . -name "tags" -exec rm {} \;
        -find . -name ".*" -exec rm -rf 2> /dev/null \;
        -find . -name "*.ko" -exec rm {} \;
        -find . -name ".*.cmd" -exec rm {} \;
        -find . -name "*.mod.c" -exec rm {} \;
        -rm -rf .tmp_versions


4. 面向对象的思想
对象对象是一种编程思想,而不是一种语言。Java和C++都对面向对象由语言级别的支持,但是C没有。
然而,实际系统的开发中,面向对象是个非常重要的概念。C虽然没有面向对象的语言级的支持,但是却可以在概念上支持面向对象。
比如,某个module或者service等在逻辑上相关联的操作,如start,stop,suspend等,可以封装成一个interface.
struct interface
{
 void (*start)(arg ...);
 void (*stop)(arg ...);
 ...
};

然后定义出这些操作,并且对对应成员赋值,这就相当于面向对象中的一个interface了。
static struct interface __my_interface =
{
 .start = my_start_function,
 .stop = my_stop_function,
 ...
};

如果对于某个类型,它在概念上不是一个interface,而是一个object,那么就可以封装 数据+操作。
这种思想在Linux Kernel中随处可见。比如struct file。

也就是说,利用面向对象的语言就行编写一些复杂的系统,可能确实比没有面向对象语言级支持的语言(如c)要方面快捷,但是,并不是说非面向

对象语言就不能很好的利用面向对象思想来编程了。
所以,编程时,为了面向对象而面向对象,或者因为使用的语言是java或者c++等面向对象语言,而使得自己的思路被局限,是非常愚蠢的。
单刀直入的解决问题,用最简单的方式解决问题,才是合理的。
比如,在一些非常复杂的系统面前,用C来解决一些问题,会比用java,c++等语言来解决问题复杂,那么,此时采用面向对象的语言来解决问题,

是简单而且高效的。
不能再简单,才是好程序。

 

© 著作权归作者所有

ChenQi
粉丝 61
博文 191
码字总数 111579
作品 0
丰台
高级程序员
私信 提问
我的技术博客索引

我的开发日志 我的JAVA相关文章 我的Clutter相关博客 我的网络通信相关文章 我的Linux相关文章 我的与kernel module有关的文章 我的嵌入式Linux相关文章 我的MeeGo/Moblin相关文章 我的Andri...

flowingflying
2009/09/12
0
0
linux内核源码 -- list链表

女主宣言 linux kernel里的很多数据结构都很经典, list链表就是其中之一,本文将从以下几方面介绍list链表:list的定义、list提供的操作方法、注意事项、使用实例 PS:丰富的一线技术、多元化...

ZVAyIVqt0UFji
2018/09/11
0
0
Linux桌面发展圆桌高峰会议

活动介绍 近年来,Linux操作系统在国内的市场份额稳步提升,凭借其各方面出色的表现,得到了越来越多个人和企业用户的认可,在诸多行业都能看到它的身影,尤其是在国内的一些关键核心领域。L...

优麒麟
2017/05/18
30
0
Linux的相关资源帖

http://www.kerneltravel.net/?page_id=8 2.6内核模块编程实例指导 内核模块编程之入门(一)-话说模块 内核模块编程之入门(二)—必备知识 内核模块编程之入门(三)-模块实用程序简介 内核...

AlphaJay
2010/05/21
228
0
让sourceinsight支持查看makefile、kconfig以及.s代码方法

让sourceinsight支持查看makefile、kconfig以及.s代码方法 (2011-10-12 16:44:47) 转载▼ 标签: 杂谈 分类: Linux 让sourceinsight支持查看makefile、kconfig以及.s代码方法 在用sourceins...

唧唧帝
2014/06/04
293
0

没有更多内容

加载失败,请刷新页面

加载更多

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
15分钟前
1
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
16分钟前
1
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
18分钟前
2
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
23分钟前
2
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部