摘要: 在线程对共享相同内存操作时,就会出现多个线程对同一资源的使用,为此,需要对这些线程进行同步,以确保它们在访问共享内存的时候不会访问到无效的数值。以下是线程的几种同步方式:1、互斥量。 通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上讲是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。如下例所示,就是互斥量对共享数据的操作:#include <stdio.h> #include <pthread.h> int value = 5;//共享变量 pthread_mutex_t mutex;//互斥变量 voi 阅读全文
posted @ 2012-05-27 14:19 Moonwolf 阅读(234) 评论(0) 推荐(0) 编辑
摘要: Linux进程间通信之信号量信号量是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。在UNIX下有三种分别如下:Posix有名信号量;Posix基于内存的信号量;System V信号量。在这里只和大家分享下有关System V信号量。System V通过定义计数信号量集来对信号量的操作,计数信号量集是一个或多个信号量构成一个集合,其中每个都是计数信号量。对于系统中的每个信号量集,内核维护一个如下的信息结构,它定义在<sys/sem.h>头文件中。struct semid_ds{struct ipc_perm sem_perm; /* operation permis 阅读全文
posted @ 2012-05-27 14:14 Moonwolf 阅读(186) 评论(0) 推荐(0) 编辑
摘要: Linux进程间通信之共享内存 共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核(这里说的不涉及内核的含义是:进程不再通过执行任何进入内核的系统调用来彼此传递数据)。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步,同步的方式有多种,比如:信号量、互斥锁等等。以下两图分别描述了读写消息时,一个要进入内核,而一个不进入内核的情况:对于System V共享内存区,内核维护如下的信息结构,它定义在<sys/shm.h>头文件中:struct shmid_ds{struct ipc_perm shm_ 阅读全文
posted @ 2012-05-27 14:11 Moonwolf 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 浅谈Linux进程作者:嵌入式学院武汉华嵌中心技术支持涂佩君内容清单:1. 在 Linux 内核内进程表示2. 在 Linux 内进程管理3. 在 Linux 内核创建一个进程引言 Linux的用户空间进程的创建和管理所涉及的原理与 UNIX有很多共同点,但也有一些特定于 Linux 的独特之处。在本文中,了解 Linux 进程的生命周期,探索用户进程创建、内存管理内幕。Linux 是一种动态系统,能够适应不断变化的计算需求。Linux 计算需求的表现是以进程 的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。因此,对进程及其调度进行一般管理就显得 阅读全文
posted @ 2012-05-27 13:57 Moonwolf 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 一、用户空间内存分配:malloc、calloc、realloc1、malloc原型如下:extern void *malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节块。工作机制:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。2、calloc原型如下:voi 阅读全文
posted @ 2012-05-27 13:53 Moonwolf 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 李家凯老师结合教学案例和一些网上的资料整理了如下一文一、预备知识—程序的内存分配由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等。其操作方式类似于数据结构中的栈。2、堆区(heap):一般由程序员分配释放(malloc/free、new/delete),若程序员不释放,程序结束时可能由操作系统回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束 阅读全文
posted @ 2012-05-27 13:51 Moonwolf 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;value给出了信号量的初始值。 函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywai.. 阅读全文
posted @ 2012-05-27 12:22 Moonwolf 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 有两个网站关于vim讲的非常好:http://www.vimer.cn/http://easwy.com/blog/ 很敬佩这位大牛!!下载插件的官网是:搜一下想找的插件立马就会出来,官网很强大。http://www.vim.org/scripts/vim 默认安装在/usr/share/vim 里面vim73 和 vimfiles 两个文件夹,vim73中有一些.vim文件vim配置文件为 /etc下的vimrc文件Vim 中使用Cscope+taglist1,Cscope 以及Ctag索引文件的建立:为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:#!/bin/sh 阅读全文
posted @ 2012-05-26 23:32 Moonwolf 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子:/**fork_test.c*version1*Createdon:2010-5-29*Author:wangth*/#include<unistd.h>#i 阅读全文
posted @ 2012-05-26 12:54 Moonwolf 阅读(982) 评论(0) 推荐(0) 编辑
摘要: 1.df -hl 查看磁盘剩余空间2.查找文件 find 目录 -name 匹配文字 ,如 find . -name libstdc++3.挂载windows分区 先建立要挂在的目录 /mnt/d sudo mount -t ntfs/dev/sda5 /mnt/d -o iocharset=utf8,umask=0 卸载:umount/dev/sda54.rpm 安装:1)安装:# rpm -ivh foo-1.0-l.i386.rpm (这里讲的软件包是foo-1.0-l.i386.rpm,以下都是)2)卸载:# rpm -e foo注意:软件包名是foo,而不是rpm文件名"f 阅读全文
posted @ 2012-05-25 17:49 Moonwolf 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 摘要: 硬盘和硬盘分区在Linux都表示为设备,但这种描述应该是科学和具体的;比如IDE硬盘,在Linux 可以表示为 /dev/hda、/dev/hdb ... ;SCSI 接口的硬盘、SATA接口的硬盘表示为/dev/sda、/dev/sdb ... ... ;而IDE接口的硬盘/dev/hda,也可以表示为hd0 , SCSI 接口的如果是 /dev/sda ,另一种表示方法是sd0;理解两种表示方法有何用?至少GRUB引导管理器用到这些知识;另外我们mount (挂载)文件系统(分区),也会用到这些知识;目录索引一、对于IDE接口的硬盘的两种表示方法;1、IDE接口硬盘,对于整块硬盘的 阅读全文
posted @ 2012-05-20 00:29 Moonwolf 阅读(268) 评论(0) 推荐(0) 编辑
摘要: Win7下硬盘安装Ubuntu 12.04下面本人将介绍适合新手、简单易懂的硬盘安装方法:1、在Windows7中下载并安装EasyBCD(目前最新版2.1.2)2、将ubuntu-12.04-desktop-i386.iso文件复制到C盘根目录,用压缩软件打开,再打开casper目录,把initrd.lz、vmlinuz这两个文件解压到C盘根目录下。3、运行EasyBCD 进入操作窗口后,点Add/Remove Entries再点右下边的NeoGrub再点Install NeoGrub选中NeoGrub Bootloader,再点Configure(以上操作看似复杂其实简单,具体操作请看附件 阅读全文
posted @ 2012-05-18 16:58 Moonwolf 阅读(176) 评论(0) 推荐(0) 编辑
摘要: Linux最早由LinusBenedict Torvalds在1991年开始编写。在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为GPL: General Public License)。在不断的有杰出的程序员和开发者加入到GNU组织中后,便造就了今天我们所看到的Linux,或称GNU/Linux。 Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian... 阅读全文
posted @ 2012-05-18 16:13 Moonwolf 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 一、关于Linux的分区情况 虽然硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition)两种,主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用。扩充分区再分下去就是逻辑分区(Logical Partion),况且逻辑分区没有数量上限制。 对Linux用户来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Linux中每个分区都是用来组成整个文件系统的一部分,它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套. 阅读全文
posted @ 2012-05-17 21:49 Moonwolf 阅读(247) 评论(0) 推荐(0) 编辑
摘要: (标题都用标题3格式)1.VIM简单替换表达式替换命令可以在全文中用一个单词替换另一个单词,如把“four”换为“4”::%s/four/4/g“%” 范围前缀表示在所有行中执行替换。如果仅仅对当前行进行操作,那么只要去掉%即可“g” 标记表示替换行中的所有匹配点。要实现完整匹配,可以用 “\<” 来指定匹配单词开头,用 “\>” 来指定匹配结尾: :%s/\<four\>/4/g可以在替换命令中加一个 “c” 标记,Vim 会在每次替换前提示你: :%s/\<four\>/4/gc2.显示行号: :set nu3.跳到屏幕的上中下:H M L4.tags文 阅读全文
posted @ 2012-05-09 14:25 Moonwolf 阅读(167) 评论(0) 推荐(0) 编辑