1. 线程同步和互斥的办法都有哪些?
四种进程或线程同步互斥的控制方法
1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
2、互斥量:为协调共同对一个共享资源的单独访问而设计的。
3、信号量:为控制一个具有有限数量用户资源而设计。
4、事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。
2. 如下结构体
typedefstruct {
int year;
int month;
int day;
int hour;
int min;
int sec;
} tm;
tmm_star;
boolis_ok;
判断m_star是否在2014年10月1日10时1分52秒之后,如果是is_ok为true,否则为false。
if(m_star.year<2014){is_ok=false;}
else if(m_star.month<10){is_ok=false;}
else if(...)...
is_ok=true;
3. 有两个函数定义如下:
voidfun1(int i);
constchar* fun2(int i);
定义p1、p2为函数指针类型,分别是指向fun1和fun2的变量pfun1、pfun2的函数指针类型。
再定义p1类型的函数指针数组,Array,共有5个元素。
最后定义一个指向p2类型的有10个元素的函数指针数组的指针pArray。
typedef void (*p1)(int i);
typedef const char* (*p2)(int i);
p1 pfun1=&fun1;
p2 pfun2=&fun2;
p1 Array[5];
p2 (*pArray)[10];
4. 检测一个单链表是否有环,如有给出入口地址。
使用STL map记录node,看能否遇到相同的node
5. 介绍一个自己的项目或模块,可以任选文字、UML图、时序图给出描述。
6. 猴子第一天摘了一些桃子,当即吃掉一半,再吃掉一个,每天都成吃掉上一天剩下的一半,再吃一个,到了第10天只剩下1个桃子。问第一天摘了多少桃子?编程实现第N天剩下多少桃子,比如N==10时,输出1,并分析时间复杂度。
inta[11];a[10]=1; for(inti=9;i>=0;i--){a[i]=2*(a[i+1]+1);}
//30701534 766 382 190 94 46 22 10 4 1 复杂度即为O(n)