- 博客(9)
- 资源 (6)
- 收藏
- 关注
原创 【Linux多线程】三个经典同步问题
在了解了《同步与互斥的区别 》之后,我们来看看几个经典的线程同步的例子。相信通过具体场景可以让我们学会分析和解决这类线程同步的问题,以便以后应用在实际的项目中。一、生产者-消费者问题问题描述:一组生产者进程和一组消费者进程共享一个初始为空、大小为 n 的缓冲区,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,
2015-04-30 21:17:00 6971
原创 【Linux多线程】同步与互斥的区别
很多人把同步与互斥这两个概念混淆,这里说一下它们的区别。一、同步与互斥的区别1. 同步同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。例如,线程 T2 中的语句 y 要使用线程 T1 中的语句 x 的运行结果,所以只有当语句 x 执行完成之后语句 y 才可以执行。我们可以使用信号量进行同步:semaphore S=0; // 初始化信号量T
2015-04-29 23:11:45 12287 1
原创 华为OJ2051-最小的K个数(Top K问题)
一、题目描述描述:输入n个整数,输出其中最小的k个。输入:输入 n 和 k 输入一个整数数组输出:输出一个整数数组样例输入:5 21 3 5 7 2样例输出:1 2二、Top K问题对于 Top K 问题有很多种解法。解法一:排序相信很多人会首先想到这种方法,先把数组按升序/降序进行排序,然后输出 K 个最小/最大的数。常规的排序方法时间复杂度至少是Θ(nlog2n)Θ(nlog_2n)。
2015-04-25 20:08:45 2398 2
原创 华为OJ1964-求解立方根(牛顿迭代法)
一、题目描述描述:计算一个数字的立方根,不使用库函数。函数原型double getCubeRoot(double input)输入:待求解参数 double类型输出:输出参数的立方根,保留一位小数样例输入:216样例输出:6.0二、解题报告本题要求一个数的立方根的近似值,精确到小数点后的一位。这里使用 牛顿迭代法 求近似值。牛顿迭代法,又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphs
2015-04-24 16:42:22 6877
原创 华为OJ2288-合唱队(最长递增子序列)
一、题目描述描述:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K) 。 你的任务是,已知所有N位同学
2015-04-24 13:04:01 5087 1
原创 华为OJ2011-最长公共子串
一、题目描述描述:计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符区分大小写。输入:输入两个字符串输出:输出一个整数样例输入:asdfas werasdfaswer样例输出:6二、解题报告与最长公共子序列(参见 动态规划DP)一样,最长公共子串也可以使用动态规划解决,只不过思路不太一样。准确地说,是打表的方式不一样。举个例子:s1 = bab,s2 = c
2015-04-23 11:55:33 1485
原创 【Unix编程】进程间通信(IPC)
Linux进程间通信(IPC)进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1
2015-04-21 20:42:47 3954 1
原创 可利用空间表(Free List)
写这篇文章的动因是因为 2015 年 04 月 02 日的阿里在线笔试题考到了这个知识点。我当时模模糊糊的写了一些,估计写的也不对,所以在这里总结一下。原题 常常会有频繁申请、释放内存的需求,比如在发送网络报文时,每次都要分配内存以存储报文,等报文发送完成后又需要删除报文。 为了避免频繁的new/delete对系统带来的开销,需要实现一个通用的FreeList机制。使用者总是从free
2015-04-08 10:49:30 5970 1
原创 Cracking the Coding Interview 150题(二)
3、栈与队列3.1 描述如何只用一个数组来实现三个栈。3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值。pop、push和min三个方法的时间复杂度必须为O(1)。3.3 设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,
2015-04-07 02:22:12 2003
DArray类与String类源码
2014-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人