avatar
p*p
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
avatar
P*b
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

avatar
l*b
3
好像大于等于4都行哈
avatar
t*n
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; isleep(5);
for (int i=0; isleep(2);

}
avatar
p*p
5
then you fail...
multithreading

【在 P*******b 的大作中提到】
: 如果我的理解对的话,无解吧,你怎么sleep(1)?
avatar
t*n
6
多线程的具体要求是什么?加 mutex ?
avatar
p*p
7
没要求,所以我上来问问
其实对方也没提多线程所以我一开始也是你那么想的

【在 t*********n 的大作中提到】
: 多线程的具体要求是什么?加 mutex ?
avatar
f*e
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

avatar
l*b
9
怎么减呀, 需要call sleep(1)的时候没有sleep(2)在运行呀

【在 f*****e 的大作中提到】
: 5-2-2=1
: 5-2 =3
: 5+2 = 7
: 5+2+2=9
: 其他类似。

avatar
j*y
10
如何实现 5 - 2 = 3 ?

【在 f*****e 的大作中提到】
: 5-2-2=1
: 5-2 =3
: 5+2 = 7
: 5+2+2=9
: 其他类似。

avatar
l*b
11
我想的是不是实现个timer函数,保持一个需要wake up的队列,隔一秒就可以检查一下队
列,给需要wake up 的进程发个信号.
而sleep(n)函数就是给timer发个消息注册个需要wake up的时间. 然后sleep
可是这样不能实现精确的几秒呀,要是注册的时候是个分数时间怎么办

【在 j*****y 的大作中提到】
: 如何实现 5 - 2 = 3 ?
avatar
j*y
12
你这个每隔一秒又怎么做呢? 感觉似乎要用到 sleep(1) 阿?

【在 l*******b 的大作中提到】
: 我想的是不是实现个timer函数,保持一个需要wake up的队列,隔一秒就可以检查一下队
: 列,给需要wake up 的进程发个信号.
: 而sleep(n)函数就是给timer发个消息注册个需要wake up的时间. 然后sleep
: 可是这样不能实现精确的几秒呀,要是注册的时候是个分数时间怎么办

avatar
l*b
13
其实一开始能time出来一秒的差距然后执行两个slee(2)的 thread可以. 关键这样不准
呀. 可能想错了,这题不是这意思

【在 j*****y 的大作中提到】
: 你这个每隔一秒又怎么做呢? 感觉似乎要用到 sleep(1) 阿?
avatar
p*e
14
能time的话也不用sleep(2)了吧

【在 l*******b 的大作中提到】
: 其实一开始能time出来一秒的差距然后执行两个slee(2)的 thread可以. 关键这样不准
: 呀. 可能想错了,这题不是这意思

avatar
l*b
15
嗯? 用sleep实现一个不太精确的timer,哈哈

【在 p****e 的大作中提到】
: 能time的话也不用sleep(2)了吧
avatar
p*e
16
刚开始误解了你的意思了
那可以这样
程序开始的时候同时创建一个sleep(2)两次的线程和一个sleep(5)的线程,sleep(2)完
了后挂起sleep(5)的
然后实现sleep(1):唤醒上面的线程同时创建一个sleep(2)的线程,唤醒的线程完了就
挂起sleep(2)的,最后将新的线程句柄保存作为下次使用
现在有sleep(1)和sleep(2)就能实现所有的n了

【在 l*******b 的大作中提到】
: 嗯? 用sleep实现一个不太精确的timer,哈哈
avatar
j*y
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了

avatar
p*e
18
理论上是这样
但是为了考虑效率和误差,sleep(1)应该只用在1和3的情况
其他的都可以用2和5的组合

【在 j*****y 的大作中提到】
: 有了 sleep(1)的话就能实现所有的 sleep(n)了吧
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。