- 浏览: 76966 次
- 性别:
- 来自: 长沙
最新评论
-
3258964:
若不理解,可参考http://www.srccode.cn/a ...
IOC设计模式的理解 -
luhouxiang:
最后的示例代码有点怪,BigBm 这个根本没用到classA ...
IOC设计模式的理解 -
wyh471738293:
你好,请问int y1192 = 1192 * y;int r ...
《android中对camera数据的简单编码处理》 -
ihopethatwell:
期待更详细
C:Android camera S:PC opencV阶段总结 -
sunleije:
重点没有啊,想看识别怎么和opencv交互的
C:Android camera S:PC opencV阶段总结
文章列表
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define LINE_LEN 25
//配置文件存储结构
struct httppd{
char Port[10];
char Directory[20];
...
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁,在单处理器且不可抢占的情况下同样不需要自旋锁)。
自旋锁同样是为了保护共享资源而得出来的一种锁,它与互斥锁所起到的作用类似。当资源申请者对共享资源进行访问时必需取得这个锁才能继续执行,直接持有者把锁释放,下一个当资源申请者才会取得该锁进而对资源访问。但在等待已被占有锁的资源上,互斥锁与自旋锁会有一些不同。当资源申请者所请求资源锁已被持有,则进入休眠,直到锁被释放再由内核对资源申请者进行唤醒, ...
本来打算用一个形象的生活情况来比喻条件互斥的,但想了再想实在没有想到比较科学贴切的比喻.
那还是开门见山来说吧.
Condition Variable无论在C/C++还是C#,JAVA语言里,都会搭配一个Mutex来用.
我们知道Mutex的普通意义上是维持一个互斥变量,从而保证一个或一组操作的原子性.
同样,简单的说Mutex加在Condition Variable上也是为了保证它的原子性了.
Condition Variable,有条件的唤醒机制.最经典不过的就是生产--消息者模型了.
但有一个细节,消费者需要有"产品"才能继续它的消费行为,因此当消费者发现& ...
前面专门找了一些资料去了解函数的可重入性以及线程安全同步,我们知道在多线程并发访问共享数据时候往往会出现数据冲突,这跟之前的函数可重入性是一样的.比如两个线程要对一个全局变量加1.但这个过程在x86平台上并非原子操作,它可能会经过以下三步才能完成:
1:从内存中读取变量到寄存器中
2:寄存器加1
3:将寄存器的值写回内存
这一个非原子操作可想而知,如果有多线程并发执行,那么这三步有可能就在线程间交叉执行.如:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h> ...
可重入 & 信号安全
可重入性函数( Reentrant Function) 可重入与线程安全是两个独立的概念, 都与函数处理资源的方式有关。 首先,可重入和线程安全是两个并不等同的概念,一个函数可以是可重入的,也可以是线 ...
redis 主从复制
redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点1.master可以有多个slave2.除了多个slave连到相同的master ...
Redis 内存存储结构
- 博客分类:
- Redis架构与源码分析
转自:搜索技术博客-淘宝 Redis内存存储结构分析
1 Redis 内存存储结构
本文是基于 Redis-v2.2.4 版本进行分析.
1.1 Redis 内存存储总体结构
Redis 是支持多key-value数据库(表)的,并用 RedisDb 来表示一个key-value数据库(表). redisServer 中有一个 redisDb *db; 成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下 ...
Redis运行流程源码解析
- 博客分类:
- Redis架构与源码分析
转自:http://www.searchdatabase.com.cn/showcontent_62166.htm
概述
Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:配置信息,统计信息,服务器状态等等)。启动时通过读取配置文件里边的信息对server进行初始化(如果没有指定配置文件,将使用默认值对sever进行初始化),初始化的内容有:起监听端口,绑定有新连接时的回调函数,绑定服务器的定时函数,虚拟内存初始化,log初始化等等。
启动
初始化服务器配置
先来看看redis 的main函数的 ...
Linux信号(signal) 机制分析
- 博客分类:
- linux c
分享
应用程序
公共主页
人人生活
人人小组
同名同姓
校园
进程有独立的用户内存地址,
进程的全局变量对其它进程透明,
需通过内核缓冲内共享数据,通信
管道: 声明在unistd.h头文件中
原型 int pipe(int filedes[2]); filedes[0]表示输入管道,filedes[1]表示输出管道. 返回值:0表示创建管道成功,-1为失败/
代码测试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc,char ...
shell批量文件目录创建
- 博客分类:
- shell
上代码:
#! /bin/sh
is_directory()
{
DIR_NAME=$1
echo "开始测试目录$DIR_NAME"
if [ -d $DIR_NAME ];then
echo "$DIR_NAME 已存在"
return 1
else
echo "创建文件目录-$DIR_NAME"
return 0
fi
}
for var_dir in "$@";do
if ! is_directory "$var_dir" ...
Linux自定义系统调用
- 博客分类:
- linux c
Linux自定义系统调用
如果用户在Linux中添加新的系统调用,应该遵循几个步骤才能添加成功,下面几个步骤详细说明了添加系统调用的相关内容。
2.1添加源代码
第一个任务是编写加到内核中的源程序,即将要加到一个内 ...
目录:
1. Linux系统调用原理
2. 系统调用的实现
3. Linux系统调用分类及列表
4.系统调用、用户编程接口(API)、系统命令和内核函数的关系
5. Linux系统调用实例
1.系统调用原理
系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。
从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请 ...
strace实现原理(ptrace)
- 博客分类:
- linux c
strace实现原理
引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它 ...
运用exec与dup2写的小测试
- 博客分类:
- linux c
上代码:
/* upper.c */
#include <stdio.h>
int main(void)
{
int ch;
while((ch = getchar()) != EOF) {
putchar(toupper(ch));
}
return 0;
}
终端输入:
upper的默认输出是终端,
gcc -g upper.c -o upper
./upper
便可以任意输入,以ctr c退出
文件管道输入;
touch file.txt
可以对file.txt输入任意字符串
终端输入./upper < file. ...