操作系统
文章平均质量分 60
peter ren
这个作者很懒,什么都没留下…
展开
-
线程通信之无锁队列
什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。 如图: 单生产者单消费者模型的队列操作过程是不需要进行加锁的。生产者通过写索引控原创 2015-12-18 16:25:46 · 810 阅读 · 0 评论 -
Linux心跳---HZ
HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 查看配置命令:cat /boot/config-uname -r | grep ‘^CONFIG_HZ=’在2.4之前的内核中其大小为100; 从内核2.6开始,HZ =原创 2015-12-21 10:45:17 · 1883 阅读 · 0 评论 -
用管道实现线程驱动和通信
一,管道读写规则 当没有数据可读时O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止。 O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN。 当管道满的时候O_NONBLOCK disable: write调用阻塞,直到有进程读走数据 O_NONBLOCK enable:调用返回-1,errno值为EAGAIN所以原创 2015-12-21 17:38:41 · 691 阅读 · 0 评论 -
可重入函数
1.什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。下面示例一个为可重入,一个为不可重入:#include <stdlib.h>#include <stdio.h>#include <unistd.h>原创 2015-12-04 12:19:26 · 449 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能
转载:http://www.ibm.com/developerworks/cn/linux/l-async/AIO 简介 Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍转载 2016-01-11 13:08:53 · 285 阅读 · 0 评论 -
pthread_once
有时候我们需要对一些posix变量只进行一次初始化,如果进行多次初始化程序就会出现错误。单线程比较容易,但是在多线程程序设计中,事情就变的复杂的多。如果我们需要对一个posix变量静态的初始化,可使用的方法是用一个互斥量对该变量的初始话进行控制。但有时候我们需要对该变量进行动态初始,pthread_once就会方便的多。 函数原形:pthread_once_t once_control=PTHREA原创 2016-02-17 11:34:08 · 407 阅读 · 0 评论 -
Linux--进程组、会话、守护进程
1:进程组(一个或多个进程的集合) #include pid_t getpgrp(void); getpgrp()用来取得目前进程所属的组识别码。 此函数相当于调用getpgid(0) #include > pid_t getpgid(pid_t pid); getpgid()用来取得参数pid指定进程所属的组识别转载 2016-05-25 15:03:54 · 291 阅读 · 0 评论