Archive for July, 2009

July 31, 2009

Linux 为每个进程提供了三个定时器:

  • ITIMER_REAL: 给一个指定的时间间隔,按照实际的时间来计数,发出SIGALRM信号;
  • ITIMER_VIRTUAL: 当进程执行的时候才计数,发出SIGVTALRM信号;
  • ITIMER_PROF: 当进程执行或者是系统为进程调度的时候计数,发出SIGPROF信号。这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。
Tags: ,. 79 views
July 29, 2009

如果两个或多个进程永久等待某个事件而该事件只能由这些等待进程的某一个引起,那么死锁就会发生。死锁的发生需要满足四个必要条件:

  • 互斥:资源的互斥访问,没有互斥就不会产生死锁;
  • 占有并等待:某个进程占有了一定资源,并且因无法得到其他资源而等待;
  • 非抢占:某个进程所占有的资源,不允许被其他进程抢占;
  • 循环等待:对于进程序列{P0, p1, …… , Pi, Pi+1, ……, Pn},Pi在等待Pi+1所占有的资源,P0占有了Pn需要的资源;
Tags: . 9 views
July 28, 2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
 
using namespace std;
 
class demo
{
public:
	demo(){}
private:
	const int m_matrix[10][10];
};
 
int main()
{
	return 0;
}

error C2439: ‘demo::m_matrix’ : member could not be initialized
这可咋办啊?class里面,普通数组可以有,可const数组就真的不能有吗?

Tags: . 33 views
July 27, 2009

多线程程序的各线程通常会共享某些资源,比如代码、文件、数据等,这些被共享的资源通常会成为临界资源。各线程访问临界资源的代码区段称作临界区,临界区代码的执行应该是互斥的,否则可能造成错误的行为。解决临界区问题的算法必须满足三个条件:

  • 互斥:临界区的访问应该是互斥进行的;
  • 有空让进:若没有线程的其临界区执行,则应该允许一个或者多个线程请求(进入区)进入其临界区;
  • 有限等待:任何线程都不能霸占临界区,即持续访问临界区的时间或者次数应该有一个上限;

下面的这段代码简易地实现了两个线程互斥地访问临界资源(std::string Critical),可以证明,其满足上述三个条件。

Tags: . 9 views
July 20, 2009
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main()
<%
    cout<<"hello,world"<<endl;
    return 0;
%>

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈!

Tags: . 17 views
题目描述:

给你n个整数,用这n个拼成一个超长的整数,要令这个新的整数最小

输入:

多组测试数据,每组第一行为n(1<=n<=1000),接下来是n个正整数,使用空格或者换行分开;
每个数字的长度不会超过1000,不存在前导0;
当n为0时结束程序.

输出:

对于每组输入,输出拼成的新的整数的结果

Tags: ,. 36 views
July 19, 2009

列举一些ReadLine的键绑定,凡是使用Readline控件的程序中都可以使用这些快捷键,比如bash、lftp、gdb等。首先,做一下约定:

  • \C-a 表示 Ctrl+a
  • \M-a 表示 Meta+a Meta键 在 PC 中通常为 ALT键或 ESC键
Tags: . 33 views
July 18, 2009

POJ 1028:http://acm.pku.edu.cn/JudgeOnline/problem?id=1028
模拟浏览器前进、后退、访问到某个页面的过程。又是一道水题,我什么时候才能做到水王之王的位置?

Tags: ,. 30 views
July 12, 2009

ZOJ上的一道题(illusive chase)让我憋了一整天才AC了,而且用了224行,最后优化到115行!我真真是没救了,也只能做做小儿科的题目了!sucks……这里有上次百度之星的一道水题……

题目描述:

一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:

15=1+2+3+4+5
15=4+5+6
15=7+8
Tags: ,. 111 views
July 9, 2009

由于归并排序需要O(n)的额外空间,在普通函数中,我实在想不出好的办法来申请这块内存。于是只好把他写成一个模板类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T>
class Merger
{
public:
	Merger(T* array, size_t n):extra(new T[n/2]) //~ 归并需要O(n)的额外空间
	{
		sub_Merger(array, n); //~ 调用递归子函数
	}
	~Merger()
	{
		delete [] extra; //~ 释放内存
	}
private:
	T* extra;
	Merger();
	void sub_Merger(T* array, size_t n);
};

如果你有什么好的建议的话,敬请赐教,不胜感激涕零!:)

Tags: ,. 102 views
Page 1 of 212