上一页 1 ··· 3 4 5 6 7 8 9 10 11 下一页
摘要: 信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量及对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。p操作和v操作是不可中断的程序段,称为原语。P,V原语中P是荷兰语的Passeren,相当于英文的pass, V是荷兰语的Verhoog,相当于英文中的incremnet。且在P,V愿语执行期间不允许有中断的发生。首先应弄清PV操作的.. 阅读全文
posted @ 2013-06-19 18:53 iyjhabc 阅读(2222) 评论(0) 推荐(0) 编辑
摘要: 互斥锁: 互斥锁是一种保护机制。上锁后其他线程不能进入保护区域的代码,直到锁被释放。信号量: 信号量是一种同步机制。信号量的值代表可用的资源数目,当值大于0代表有可用资源,则允许继续操作,否则线程阻塞,等待可用资源。当可用资源是1时,信号量与互斥锁基本没区别,都起保护作用。当资源数大于1,则当信号量大于0时线程都可进行操作。如果资源大于1时使用互斥锁,则就算资源数大于1时,也只能有一个线程进入操作,其余线程必须阻塞。信号量可用于进程通信和线程通信,而互斥锁只能用于线程通信。 阅读全文
posted @ 2013-06-19 17:04 iyjhabc 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 1、环形缓冲区(下面生产者消费者的例子使用) 使用一段内存空间作为缓冲区,维护两个指针,一是读指针,指向缓冲空间的第一个可读位置;二是写指针,指向空间的第一个空位置。读取一个数据后,读指针+1,当指针位置超出缓冲区域则指向缓冲区域的头位置(置0);写入一个数据后,写指针+1,当指针位置超出缓冲区域则指向缓冲区域的头位置(置0);由于空间循环利用,故称为环形缓冲区。 空间满和空都是读指针位置等于写指针位置。如何判断空间已满?空?方法1:废弃一个缓冲空间不用,当写指针+1等于读指针的时候(意思是写指针多跑一圈快要赶上读指针),此时表明空间已满。方法2:维护一个变量记录缓冲区使用大小,当大小等于.. 阅读全文
posted @ 2013-06-18 21:55 iyjhabc 阅读(5699) 评论(1) 推荐(1) 编辑
摘要: 一 pthread_tpthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedef unsigned long int pthread_t;它是一个线程的标识符。二 pthread_create函数pthread_create用来创建一个线程,它的原型为:extern int pthread_create __P ((pthread_t *__thread, __constpthread_attr_t *__attr,void *(*__start_routine) (void *), void *__arg));第一个参数为指向线程标识符的 阅读全文
posted @ 2013-06-18 17:13 iyjhabc 阅读(2468) 评论(0) 推荐(0) 编辑
摘要: 使用bitset可以方便地进行位操作,并可转为string型和无符号整型。#include <bitset>int main(){ //构造函数 bitset<16> a(3);//整数转二进制 bitset<5> b("101010"); //输出流与随机存取 cout<<b<<" "<<b[1]<<endl; //置位 a.set();//全部置位 b.set(0);//置第一位 cout<<a<<" "<<b& 阅读全文
posted @ 2013-06-18 14:59 iyjhabc 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。 胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。 叶子节点相当于参赛选手,中间节点是比赛,比赛中败者记录在中间节点,胜者继续参加后面的比赛,直到根节点。根节点之上的一个节点用来记录最终胜者。 败者树的建立:在参赛者数组b[]的最后添加一位,存... 阅读全文
posted @ 2013-06-18 09:37 iyjhabc 阅读(8740) 评论(0) 推荐(0) 编辑
摘要: 当排序内容太大,不足以全部放入内存进行内部排序,则可把排序内容按可用内存大小分割成多个文件,分别读取文件进行内排,排序结果继续写入文件。最后对所有文件进行归并排序合并成有序大文件。外部排序步骤:1、分割数据 2、分别内排 3、归并小文件// acm.cpp : Defines the entry point for the console application.//#include "stdafx.h"#pragma warning(disable: 4786)#include <iostream>#include <string>#include 阅读全文
posted @ 2013-06-14 10:03 iyjhabc 阅读(406) 评论(0) 推荐(0) 编辑
摘要: STL string1、初始化-把c字符串转换成stringchar s[]="abc e df";string str=s;string str(5,'x');//初始化为5个x2、查找从前开始搜索:str.find(目标子串,开始搜索位置)从后开始搜索:str.rfind如查找不到目标,则返回string::npos3、替换str.replace(开始下标,覆盖长度,替代字符串,可加)当覆盖长度填为0时,其实就是插入操作。4、删除str.erase(开始下标,删除长度)5、插入str.insert(开始下标,插入字符串)6、比较str.compare(与 阅读全文
posted @ 2013-05-10 11:29 iyjhabc 阅读(667) 评论(0) 推荐(0) 编辑
摘要: https://github.com/iyjhabc/Design-Pattern第一章:简单工厂模式使用一个工厂类来根据参数调用不同的函数。因此增加功能时只需改变工厂类以及新增函数即可。class oper{protected://使用保护成员,子类可以访问。子类不能访问私有成员 double lhs; double rhs;public: double virtual getResult()=0;//纯虚函数 void set_lhs(double lhs){this->lhs=lhs;} void set_rhs(double rhs){this->rhs=... 阅读全文
posted @ 2013-04-24 10:45 iyjhabc 阅读(2318) 评论(0) 推荐(1) 编辑
摘要: 1、农场计数问题/*问题描述1、已知某农场中有一群鸡和兔子,总共有M个头和N只脚,计算总共有多少鸡和兔子l 要求实现函数int GetFowlsNum(int iHeadNum, int iFootNum, int *iChickenNum, int *iRabbitNum)【输入】 iHeadNum: 总共头的数量 iFootNum: 总共脚的数量【输出】 iChickenNum: 鸡的数量 iRabbitNum: 兔子的数量【返回】 0: 找到符合要求的鸡和兔子的数量 ... 阅读全文
posted @ 2013-04-13 12:14 iyjhabc 阅读(2508) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 下一页