p*****p 发帖数: 379 | 1 两个func:
calling sleep(2) will sleep for 2 seconds
calling sleep(5) -> 5 sec
can do nothing while asleep
achieve sleep(n) where n is an arbitrary natural number |
P*******b 发帖数: 1001 | 2 如果我的理解对的话,无解吧,你怎么sleep(1)?
【在 p*****p 的大作中提到】 : 两个func: : calling sleep(2) will sleep for 2 seconds : calling sleep(5) -> 5 sec : can do nothing while asleep : achieve sleep(n) where n is an arbitrary natural number
|
l*******b 发帖数: 2586 | |
t*********n 发帖数: 89 | 4 void sleep(int n)
{
assert(n>0);
assert(n>5 || n%2==0);
int five = n/5;
int rest = n%5;
int two = 0;
switch(rest){
case '0':
break;
case '1':
{
five--;
two =3;
break;
}
case '2':
case '4':
{
two = rest/2;
break;
}
case '3':
{
five --;
two = 4;
}
default:
break;
}
for (int i=0; i
sleep(5);
for (int i=0; i
sleep(2);
} |
p*****p 发帖数: 379 | 5 then you fail...
multithreading
【在 P*******b 的大作中提到】 : 如果我的理解对的话,无解吧,你怎么sleep(1)?
|
t*********n 发帖数: 89 | |
p*****p 发帖数: 379 | 7 没要求,所以我上来问问
其实对方也没提多线程所以我一开始也是你那么想的
【在 t*********n 的大作中提到】 : 多线程的具体要求是什么?加 mutex ?
|
f*****e 发帖数: 2992 | 8 5-2-2=1
5-2 =3
5+2 = 7
5+2+2=9
其他类似。
【在 p*****p 的大作中提到】 : 两个func: : calling sleep(2) will sleep for 2 seconds : calling sleep(5) -> 5 sec : can do nothing while asleep : achieve sleep(n) where n is an arbitrary natural number
|
l*******b 发帖数: 2586 | 9 怎么减呀, 需要call sleep(1)的时候没有sleep(2)在运行呀
【在 f*****e 的大作中提到】 : 5-2-2=1 : 5-2 =3 : 5+2 = 7 : 5+2+2=9 : 其他类似。
|
j*****y 发帖数: 1071 | 10 如何实现 5 - 2 = 3 ?
【在 f*****e 的大作中提到】 : 5-2-2=1 : 5-2 =3 : 5+2 = 7 : 5+2+2=9 : 其他类似。
|
|
|
l*******b 发帖数: 2586 | 11 我想的是不是实现个timer函数,保持一个需要wake up的队列,隔一秒就可以检查一下队
列,给需要wake up 的进程发个信号.
而sleep(n)函数就是给timer发个消息注册个需要wake up的时间. 然后sleep
可是这样不能实现精确的几秒呀,要是注册的时候是个分数时间怎么办
【在 j*****y 的大作中提到】 : 如何实现 5 - 2 = 3 ?
|
j*****y 发帖数: 1071 | 12 你这个每隔一秒又怎么做呢? 感觉似乎要用到 sleep(1) 阿?
【在 l*******b 的大作中提到】 : 我想的是不是实现个timer函数,保持一个需要wake up的队列,隔一秒就可以检查一下队 : 列,给需要wake up 的进程发个信号. : 而sleep(n)函数就是给timer发个消息注册个需要wake up的时间. 然后sleep : 可是这样不能实现精确的几秒呀,要是注册的时候是个分数时间怎么办
|
l*******b 发帖数: 2586 | 13 其实一开始能time出来一秒的差距然后执行两个slee(2)的 thread可以. 关键这样不准
呀. 可能想错了,这题不是这意思
【在 j*****y 的大作中提到】 : 你这个每隔一秒又怎么做呢? 感觉似乎要用到 sleep(1) 阿?
|
p****e 发帖数: 3548 | 14 能time的话也不用sleep(2)了吧
【在 l*******b 的大作中提到】 : 其实一开始能time出来一秒的差距然后执行两个slee(2)的 thread可以. 关键这样不准 : 呀. 可能想错了,这题不是这意思
|
l*******b 发帖数: 2586 | 15 嗯? 用sleep实现一个不太精确的timer,哈哈
【在 p****e 的大作中提到】 : 能time的话也不用sleep(2)了吧
|
p****e 发帖数: 3548 | 16 刚开始误解了你的意思了
那可以这样
程序开始的时候同时创建一个sleep(2)两次的线程和一个sleep(5)的线程,sleep(2)完
了后挂起sleep(5)的
然后实现sleep(1):唤醒上面的线程同时创建一个sleep(2)的线程,唤醒的线程完了就
挂起sleep(2)的,最后将新的线程句柄保存作为下次使用
现在有sleep(1)和sleep(2)就能实现所有的n了
【在 l*******b 的大作中提到】 : 嗯? 用sleep实现一个不太精确的timer,哈哈
|
j*****y 发帖数: 1071 | 17 有了 sleep(1)的话就能实现所有的 sleep(n)了吧
【在 p****e 的大作中提到】 : 刚开始误解了你的意思了 : 那可以这样 : 程序开始的时候同时创建一个sleep(2)两次的线程和一个sleep(5)的线程,sleep(2)完 : 了后挂起sleep(5)的 : 然后实现sleep(1):唤醒上面的线程同时创建一个sleep(2)的线程,唤醒的线程完了就 : 挂起sleep(2)的,最后将新的线程句柄保存作为下次使用 : 现在有sleep(1)和sleep(2)就能实现所有的n了
|
p****e 发帖数: 3548 | 18 理论上是这样
但是为了考虑效率和误差,sleep(1)应该只用在1和3的情况
其他的都可以用2和5的组合
【在 j*****y 的大作中提到】 : 有了 sleep(1)的话就能实现所有的 sleep(n)了吧
|