0xAA55 发表于 2018-6-10 17:49:59

【C】让我们来讲一个笑话:“我们用sleep(0)进行时间片管理”

到底哪里好笑了呢?我们来看看glibc的源码吧:




看见没?if(seconds == 0) return 0; 所以sleep(0)毫无用处。
然而!不少人把它当成和SwitchToThread()、sched_yield()、pthread_yield()等类似的玩意儿。

这种玩法来源于Windows的Sleep(0)的用法。看MSDN的原文:

This function causes a thread to relinquish the remainder of its time slice and become unrunnable for an interval based on the value of dwMilliseconds. The system clock "ticks" at a constant rate.



然而,Unix、Linux的sleep(0)并不是相同的玩意儿。连时间单位都不一样了,俩API怎能相同。

傻。

勇芳软件 发表于 2018-6-10 17:57:58

就你是分析了sleep(0) 是直接返回,什么也不是了。

0xAA55 发表于 2018-6-10 18:19:19

勇芳软件 发表于 2018-6-10 17:57
就你是分析了sleep(0) 是直接返回,什么也不是了。

论大小写。Sleep(0)与sleep(0)

勇芳软件 发表于 2018-6-10 19:16:14

Sleep(0)与sleep(0) 不同吗?

0xAA55 发表于 2018-6-10 19:44:07

勇芳软件 发表于 2018-6-10 19:16
Sleep(0)与sleep(0) 不同吗?

你没看帖子?Sleep(0)是Windows多线程切时间片用的写法,sleep(0)是Windows转Linux的开发者想当然写出的逗比写法。
页: [1]
查看完整版本: 【C】让我们来讲一个笑话:“我们用sleep(0)进行时间片管理”