- 博客(244)
- 资源 (32)
- 收藏
- 关注
原创 C++多核高级编程 - 06 并发任务的通信和同步(3) 线程的策略方法及工作的分解和封装
一 , 线程的策略方法线程的策略决定了在将应用程序线程化时可能使用的方法。方法决定了被线程化的应用程序如何将它的工作委派给任务及通信如何进行。常见的模型:委托(boss-worker)对等(peer-to-peer)流水线(pipeline)生产者-消费者(producer-consumer)在对应用程序建模时对于不同的阶段要采取不同的模型,一个模型可以嵌入到另一个模型
2012-07-21 19:45:45 1132
原创 无线网络-LTE (01) LTE Overview
01 LTE网络结构LTE 网络与UMTS和CDMA相比网络结构更加的扁平化。它大致分为非漫游和漫游两种结构,但其基本的网元都没有变化,不同在于归属位置。LTE 非漫游网络结构LTE 漫游网络结构02 网元及功能1)- eNodeB- 无线资源管理- IP 头压缩和用户数据加密- MME选择- User Plane
2012-07-12 08:31:29 5369
原创 C++多核高级编程 - 06 并发任务的通信和同步(2) 对并发进行同步
一,同步类型任何计算机系统中,系统资源都是有限的。在多进程或多线程程序组成的系统中,必然会存在对资源的竞争关系。按照资源需求的不同,系统中同步类型大致可分为三种:- 数据:它允许并发线程/进程安全的访问一个内存块。- 硬件:当多个进程或线程需要一个或多个硬件支持时,它允许并发进程或线程安全的访问硬件,并且对于实时性和任务的优先级有一定的要求。-
2012-07-01 20:53:24 1108
原创 IDA Pro 代码破解揭秘 (一) 逆向工程基础
一,汇编语言汇编是与计算机交换的一种有趣的方法。就其本身来说,汇编是指与处理器指令集一一对应指令助记符的使用。二,寄存器预分配的,物理上存在于处理器中的变量。可以用来保存整数,偏移量,立即数,指针等。简单的介绍几个32位通用寄存器:EAX, EBX, ECX, EDX,ESI, EDI, EBP, ESP, EIP。他们都可以用来存储用户数据,但有些有着自己专门的用
2012-07-01 09:45:39 5180
原创 C++多核高级编程 - 06 并发任务的通信和同步(1) 通信和同步
一, 依赖关系当进程或线程相互之间要求通信或协作完成一个共同的目标时,他们之间便存在了依赖关系。通信依赖:当TaskA要求来自TaskB的数据才能执行它的工作时,TaskA和TaskB之间便存在了通信依赖关系。协作依赖:当TaskA要求的资源被TaskB所拥有,而且在TaskA使用该资源前TaskB必须释放它则他们之间存在协作依赖关系。可以通过列举应用程序中
2012-06-24 09:53:17 1022
原创 C++多核高级编程 - 05 多线程
一,什么是线程线程是进程中可执行代码流的序列,它被操作系统调用,并在处理器或内核上运行。所有进程都有一个主线程,主线程是进程的控制流或执行路线。线程分为用户线程和系统线程,线程在创建,维护和管理方面给系统带来的负担要轻得多。线程用于执行系统中的并发任务,可以简化系统中固有的并发的程序的结构。用户级线程和内核级线程线程有三种实现模型: 用户级或应用程序级,内核级,用户级和内核级混合线
2012-06-17 19:06:12 2332
转载 为你的生命多积累一些厚度 - 作者:杨毅
你所有不曾料想过的问题,都会随着时间的推移而与你不期而遇;你所有曾经潇洒的随遇而安,同样也会随时间流逝而让你承担那些似乎命中已经注定的代价。在这个世界上,“唯一不可阻挡的是时间,它像一把利刃,无声地切开了坚硬和柔软的一切,恒定地向前推进着,没有任何东西能够使它的行进产生丝毫颠簸,它却改变着一切。”我始终相信一句话:出来混,迟早要还的。虽然你我皆是凡人,只是这芸芸众生中的普通一员,但我依然希望每个人
2012-06-10 10:18:02 4658
原创 C++多核高级编程 - 04 多进程
一,进程概念,为什么是多进程而不是多线程进程是由操作系统创建的工作单元。值得注意的是进程和程序未必是等同的。一个程序可能由多个任务组成,而每个任务可以和一个或多个进程相关联。程序是由程序员创建的,而进程是由操作系统创建的。一个工作单元要想被称作进程,它必须要有操作系统指派给他的地址空间,必须拥有进程ID,必须拥有状态和进程表中的表项。进程和线程之间最大的区别是进程有着自己的地址空间,而线程共享
2012-06-03 20:31:40 5096
原创 C++多核高级编程 - 03 操作系统的角色和任务
1, 操作系统的角色操作系统的作用主要有2个:- 软件接口: 为计算机的硬件资源定义提供一致且定义良好的接口。- 资源管理:管理硬件资源以及其他正在执行的应用软件,作业和程序。1-1 提供一致的接口操作系统出现之前程序员必须要熟悉特定的指令集和每个设备的特性。显卡,磁盘驱动,打印机等都有完全不同的指令集,而且不同厂商的指令集也不一样。程序很难有通用性。
2012-05-12 17:06:11 1737
原创 C++多核高级编程 - 02 并行程序设计中系统的任务及挑战
一,并行的概念如果两个事件在相同的时间间隔内发生,则我们称他们是并发的。两个或多个任务在相同时间间隔内执行,则我们称他们是并行的。如果两个任务在同一秒并行,但其实两个任务可能在同一秒的不同部分执行。例如第一任务在第一个十分之一秒运行第二个任务则在第二个十分之一秒运行,之后又是第一个任务.... 交替运行。但由于时间较短给人的感觉还是两个任务在同时进行。时间的间隔可以放大,也可以缩小。无论任务间
2012-04-30 21:37:47 1960
原创 C++多核高级编程 - 01 新的计算机体系结构及多核设计
多核是将多个处理器放在一个计算机芯片上的设计,每个处理器被称作一个核。这些设计被称作芯片多处理器(Chip Multiprocessor CMP)。多核处理器的常见配置:配置 1: 超线程处理器,在一个芯片上运行一个或多个线程,是逻辑上的多处理器,而不是物理上的。配置 2: 现在主流的多核处理器,一个芯片上为一个处理器。配置 3: 未来的发展方向,在一个芯片上存在多个物理
2012-04-30 21:24:33 1724
原创 压缩算法-LZW
压缩算法-LZW基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。1) 从源文件中读取不同字节;2) 根据字节创建字符串编译表;3) 使用字符串编译表中的字符索引来替换源文件中相应的字符串。LZW使用扩充的ASCLL表,用12位表示,0~255表示一个数据字节, 2
2012-04-03 20:35:22 34413
原创 加密解密-替换加解密
加密解密-替换加解密按一定规则重新替换明文的字符生成密文。可以有多种替换方式。#include void encrypt(char* strData, int nCode){ int i = 0; char* p = NULL; int nLen = strlen(strData); if (nLen == 0) {
2012-04-02 15:33:02 1237
原创 加密解密-换位加解密
加密解密-换位加解密基本思想:将明文按给定的顺序进行输出,形成密文。示例:二维数组保存明文按行优先方式,输出密文按列优先方式。#include void encrypt(char arrData[4][4]){ int i = 0, j = 0; char tmpData[4][4]; for (i = 0; i < 4; i++)
2012-04-02 15:21:06 2906
原创 游戏算法-生命游戏
游戏算法-生命游戏生命游戏又称细胞自动机。反映了生命演化的规则。生命游戏原理:生命生活在二维环境中,每个生命生活在一个方格中,每个细胞在下一个时刻的状态取决于周围8个细胞的活着或死了的状态。1) 如果周围活着的细胞数量少于设定的值,细胞将孤独而死。2) 如果周围活着的细胞数量多于设定的值,细胞将拥挤而死。状态机举例:#include
2012-04-02 11:40:50 4227
原创 游戏算法-洗扑克牌
游戏算法-洗扑克牌扑克牌洗牌算法中关键点:随机值的算法及扑克牌的设计。#include #include #include #define CARD_NUM 52typedef struct _card_tag{ char m_card_num; char m_suit; // 3:heart 4:club 5:diomand 6:sp
2012-04-02 11:23:39 1598
原创 趣味算法-寻找假硬币
趣味算法-寻找假硬币8枚硬币,一枚假的,假的比真的少轻,通过程序寻找假硬币。采用分治算法:1) 硬币分2组,找出比较轻的一组。2) 再把稍轻的一组继续分为2组,再找出稍轻的一组。3) 直至比较2个硬币为止。#include int checkcoin(int arrCoin[], int nStart, int nEnd){ int nMid
2012-04-02 11:01:36 2519
原创 趣味算法-三色旗
趣味算法-三色旗一条绳子挂红白蓝三种颜色的旗子,且排列无序,现用程序把三种旗子同色归类,顺序为红-白-蓝,每次只能交换2面旗子,采用最少步骤完成。算法描述:只需把红色和蓝色的旗子进行交换,红旗和篮旗都就位后,白旗自然就位。1) 从前向后设定红旗的最后位置,如果该位置不是红旗,向后扫描旗子队列,如果发现红旗则与当前红旗位置的旗子交换。2) 如果该位置是红旗,则向后移动红旗的最后位置。
2012-04-02 10:55:04 7515
原创 趣味算法-青蛙过河
趣味编程-青蛙过河:两队青蛙,河左边3只,右边3只,青蛙过河要踩着石头,每次移动青蛙最多可以跳过对面的一只青蛙,但必须落在空的石头上。算法原则:每次只移动一只青蛙。1) 检查整个路径左侧青蛙越过右侧青蛙跳到空白石头上的情况;2) 检查整个路径右左侧青蛙越过左侧青蛙跳到空白石头上的情况;3) 检查整个路径左侧青蛙可以直接向右移动到空白
2012-03-17 15:04:13 6458 1
原创 趣味算法-八皇后
趣味编程-八皇后:在国际象棋棋盘上在每一行都要摆一个后,两个后不能在同一行,同一列,同一个斜线上出现。计算有多少种摆放方法。采用递归尝试的方法:1) 在棋盘上摆放一个皇后;2) 看皇后是否满足要求;3) 如果满足则尝试下一行,不满足则回退到上一步。代码点:1) 用 int [8] 表示列,用数组的值表示皇后在该列的行的位置。2) 用(abs(boar
2012-02-26 22:29:48 644
原创 趣味算法-马踏棋盘
趣味算法-马踏棋盘国际象棋64个格,按照马的走法,踏遍棋盘的每个格。1) 使用递归算法尝试下一步是否满足条件,不满足条件则回退。2) 若所有的格都被尝试一次则成功。#include typedef struct _next_pos{ int m_x; int m_y;} next_pos_t;next_pos_t next_pos[8]={{
2012-02-14 22:36:02 1572
原创 趣味算法-背包问题
趣味算法 - 背包问题:动态规划。 一个背包容量为 N,有M 件物品,每件物品的重量 Wti, 价值 Vali,现在向背包中装入物品,在不超过容量的前提下,装入的物品价值最大。方式 1: 递归方式逐个尝试每件物品,并选择最优的策略。1) 如果是最后一件物品,是否满足条件;2) 不是最后一件物品,如果不能放入包中,则测试下一件物品;3) 如果当前物品可以放入包中,则看
2012-02-12 18:40:47 666
原创 POSIX 学习笔记---工作流
POSIX 工作流 :每个线程反复的在数据系列集上执行同一种操作,并把操作结果传递给下一步骤的其他线程。每个线程由 stage_t 描述:一个互斥量 m_mutex两个条件变量:m_ready_cond:表示当前的线程准备好处理新数据m_available_cond:表示通知下一步数据已经可用整个流水线由 pipe_t 描述,构造了一个流水线的队
2012-02-05 20:31:22 699
原创 趣味算法-Hanoi
趣味算法-Hanoi:主要是说明递归的思路。A B C三个金属棒,有n个盘片,起始时盘片都在n上,要求把所以盘片都移动到C上可以利用B。原则大盘一定要在小盘下面。思路:1) 把起始位置上A的n-1个盘子移动到B上, 这时可以通过C,这时可以移动A上的第n个盘子。2) 把B上的n-1个盘子在都移动到C上,这时可以通过A,这时达到目的,移动完成。注意:参数的顺序和含
2012-01-31 11:57:39 597
原创 趣味算法-回文数
趣味算法-回文数一个数字从左向右读与从右向左读是一样的。1) 计算当前数字的位数;2) 从低位向高位,取得第i位上的数字,并乘以10的n-i次方;3) 把数字保存在和中;4) 判断是否和原数相等。#include #include int IsHuiWen(int nNum){ int n = 0, i = 1; int nTmp =
2012-01-25 16:39:42 2357
原创 趣味算法- 最大公约数和最小公倍数
最大公约数:辗转相除法 和 Stein算法1, 辗转相除法原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。证明:设两数为a、b(b 第一步:令c=gcd(a,b),则设a=mc,b=nc 第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c 第三步:根据第二步结果可知c也是r的因数 第四步:可以断定m-kn与n互素【否则,可设m-k
2012-01-25 12:37:29 948
原创 趣味算法-自守数
趣味算法-自守数:一个正整数的平方的末尾几位数等于这个数本身,那么这个数为自守数。1) 计算当前数x的位数n;2) 计算当前数的平方数 xpower;3) 计算平方数与原数的差,并对于10的n次方取模;4) 若模为0则该数为自守数。#include #include //0: not a ZiShou Number//1: is a ZiShou N
2012-01-24 18:47:17 1290
原创 趣味算法-水仙花数
趣味算法-水仙花数:一个n位正整数(n >= 3), 它的每个位上得数字的n次幂之和等于它本身。1) 计算当前正整数的位数;2) 计算每个位数上n次幂的和;3) 判断是否为水仙花数。#include #include #include // 0: the number is not narcissus number// 1: the number is nar
2012-01-24 18:42:32 779
原创 趣味算法-亲密数
趣味算法-亲密数:整数a 的因子和等于整数b,整数b的因子和等于整数a,则a 和 b是亲密数。1) 计算当前数的真因子,并求和得到Sum;2) 对真因子的和进行再求因子和 FSum;3) 判断FSum 是否和原数相等;#include #include int IsFriendNum(int nNum){ int i = 1;
2012-01-23 20:42:04 920
原创 趣味算法-完全数
完全数:一个数的因子的和等于该数。该数等于真因子的和1) 计算每个数因子;2) 求和;3) 判断该数是否为完全数#include #include int IsPerfectNum(int nNum){ int i = 0; int nSum = 0; for (i = 1; i < nNum/2+1; i++) {
2012-01-23 20:11:31 2097
原创 趣味算法-括号匹配
趣味算法-括号匹配:用堆栈保存括号信息,遇左侧括号入栈,遇右侧并与栈顶的括号匹配出栈,继续扫描字符串。#include #include // using stack to save and judge the string// return the index where the bracket not match// return 0 no problemint
2012-01-23 12:30:51 669
原创 趣味算法-城市之间最短路径
城市之间最短路径:算法描述:(1) 图中所有顶点集合为V,最小生成树顶点集合为U,初始时V包含所有顶点,U中只有起始顶点。(2) 计算下一个顶点到其实顶点V0的最短路径,并加入U。(3) 更新未加入U中的各个顶点到起始顶点的距离值为发现的最小的权值。(4) 重复该计算方法。#include #define MAX_DIST 65535#define MAX_P
2012-01-03 10:27:49 3924
原创 趣味算法-城市之间最短总距离
城市之间最短总距离:图为联通图。(1) 图中所有顶点集合为V, 最小生成树顶点集合为U初始时V包含所有顶点,U为空。(2) 从V中选取一个顶点V0,将其加入U。(3) 从V0的邻接顶点中选取边权值最小的Vn,得到最小生成树的一条边,将Vn加入集合U。(4) 再从V-U中再选取一个与V0, Vn邻接的顶点,找出权值最小的边。(5) 重复上述步骤。#incl
2011-12-29 22:30:19 2871
原创 趣味算法-约瑟夫环
约瑟夫环方式 一: 数组取余数数组取余数,若满足条件该元素值设为一,循环整个数组后,第二次循环时用一个变量保存遍历过切值不为一的数组元素的个数,作为判断条件。#include // using mode computeint calc(int n, int m, int nStart){ int i = 0, k = 0i; int nCnt = 0;
2011-12-27 22:04:49 626
原创 数学计算-圆周率计算算法
圆周率计算算法计算方法 一:圆等分法主要思想是把圆等分,求多边形的周长,分的份数越多,多边形的周长则越接近圆的周长。Y(n)^2 = 2-sqrt(4-Y(n-1)^2)PI = 3*(2^n)*Y(n)#include #include #include // start from 6 edgesdouble PI_calc(int n){ int
2011-12-16 21:16:49 2403
原创 数学计算-多项式求值算法(一维,二维)
数学计算: 多项式求值算法多项式定义 一维: P(X)=A(i) * X ^n + A(i-1)*X^(n-1) + A(i-2)*X^(n-2) * ...... A(1) * X; 二维: P(X, Y)=A(i) * X ^n * B(i) * Y ^ m + A(i-1)*X^(n-1) * B(i-1)*Y^(m-1) + A(i-
2011-12-12 23:07:53 2030
原创 希尔排序算法分析
希尔排序:又叫缩小增量排序,通过不断的缩小步长来对序列进行分组,在分组内按照一定的规则(从大到小或从小到大)移动元素。最后步长为1时完成最后的排序。#include void shell_sort(int arr[], int len){ int i = 0; int j = 0; int r = 0; int nTmp = 0;
2011-12-08 21:23:34 825
转载 不看这篇日志也许会节省你十分钟,但是却会耽误你的一辈子
HP大中华区总裁孙振耀退休感言 :如果这篇文章没有分享给你,那是我的错。 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我。 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个“茫”人了。 如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就会感叹自己的年少无知。 如果你看
2011-12-05 23:39:09 1220
原创 基数排序算法分析
基数排序:主要思想是把数字按位进行比较,从个位,十位... 到最高位,取得每个位的单个数字逐一进行比较和移动。由于整数也可以用字符串表达(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数,其他类型也可使用这种方式。
2011-12-04 15:56:50 5885
原创 堆排序算法分析
堆的性质:其实质是二叉树的排序方式。用二叉树的逻辑映射数组。例如:一个数组有10个元素,a[0]的左子树是a[1], 右子树是a[2],以此类推a[i]的左右子树分别是a[2*i+1], a[2*i+2]。在堆排序时,堆的性质是(1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤),本质是父节点要大于或小于其子节点。堆排序的过程:1) 整理一个数
2011-12-03 23:42:35 856
实例代码 学习libgdx - SpriteBatch
2014-06-23
多核编程第6章-实例代码
2012-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人