随笔分类 -  Linux C

Linux下的C编程。
摘要:以前利用linux系统提供的读写锁写过一些小程序,但是linux系统提供的读写锁是线程级的,如果是进程间的同步的话,就没那么轻松了。而且由于linux系统提供的读写锁是读优先的,在有些情况下,也不能满足我们的要求。下面就说说利用信号量来实现写优先的读写锁。  先说说原理,这个程序需要用到两个信号量,一个互斥信号量A,一个同步信号量B,其拥有MAX_RESOURCES个资源。当读进程申请读锁的时候,... 阅读全文
posted @ 2010-09-24 17:41 MR_H 阅读(4600) 评论(0) 推荐(0) 编辑
摘要:前段时间看了下google c/c++编程风格,摘录一些要点记载于此,还请各位指点。  为了接下来清楚的阐述googleC++编程规范,先阐述几个概念:  PascalCase:当标识符由两个或者两个以上单词组成的时候,单词之间不加其他的符号,并且每个单词都必须大写,例如PascalCase。  camelCase:当标识符由两个或者两个以上单词组成的时候,单词间不加其他的符号,并且第一个单词以小... 阅读全文
posted @ 2010-09-15 09:18 MR_H 阅读(3131) 评论(2) 推荐(0) 编辑
摘要:在上篇博文《线程并发执行带来的问题》的评论中,有几个朋友(锦瑟无端五十弦、Kevin-moon等)说到了要用volatile声明变量的问题,首先非常感谢他们的指点。以前一直只知道volatile关键字是通知编译器在对这个变量进行操作的时候,每次都从其内存中读取数据,不要对其进行优化,但对其具体的过程不了解。今天看一篇文章《汇编与C之间的关系》,恰好提到这个问题,于是就将其记录下来,还请您多多指教。... 阅读全文
posted @ 2010-06-02 16:25 MR_H 阅读(2605) 评论(28) 推荐(3) 编辑
摘要:线程并发会引发一些难以发现的错误,现在就来看一个简单的线程的并发导致的问题,首先来看下面程序,程序很简单,就是创建了3个线程,第一个线程对i和count加1,第二个线程对j和count加1,第三个线程对k和count加1,i,j,k,count初始化都为0,这样的华,按照逻辑来说,最后i+j+k = count:[代码]在我机子上执行的结果是:i = 92394160, j = 55544601,... 阅读全文
posted @ 2010-05-25 22:17 MR_H 阅读(4910) 评论(24) 推荐(1) 编辑
摘要:这个程序是前段时间学习线程间同步的时候写的,利用读写锁来实现的(我感觉读写锁就是专门为这类问题而生的):[代码]看看读写锁的结构体定义:[代码]其基本上是用汇编实现的,这里说说其大体的过程:   初始化的时候,给lock赋值为0x0100 0000,也就是允许的读者的最大个数.加读锁的时候,只要这个值减1后不为负,那么就能得到 该锁。而加写锁的时候,比较这个这个值是否等于0x0100 0000,如... 阅读全文
posted @ 2010-05-19 23:27 MR_H 阅读(6331) 评论(5) 推荐(5) 编辑
摘要:上一篇博客演示了一个最简单的进程的创建过程,这篇博客来演示一个最基础的线程的例子。corecible回复我上篇博文时说:“不过真正的项目开发中,开子进 程用的很少。大多都是线程。”其实也说得挺有道理的,因为像java这样的语言中,原生就支持线程,并提供了一套完整的通信的方案。在linux中,线程实际上就是一个轻量级的进程,因为他们都是通过调用do_fork()函数,传入不同... 阅读全文
posted @ 2010-05-19 21:46 MR_H 阅读(23637) 评论(13) 推荐(4) 编辑
摘要:这段时间打算把以前学的东西好好做个总结,免得总是学一样,忘一样。Linux下的C编程,就从利用fork开辟一个新的进程开始吧。  最开始接触fork的时候,觉得这个函数确实很有意思,一次调用,两次返回,看看下面这段程序:[代码]运行结果如下:This is parent process,My pid is 2945This is a child process,My pid is 2946  最初... 阅读全文
posted @ 2010-05-14 23:50 MR_H 阅读(4041) 评论(8) 推荐(2) 编辑

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