【问题标题】:Why didn't sleep working like usleep in mutithread on linux?为什么在 linux 的多线程中 sleep 不像 usleep 那样工作?
【发布时间】:2020-06-05 09:11:10
【问题描述】:

在下面的程序中,如果我把usleep换成sleep(0.5),那么它就不会像usleep一样sleep了,这是什么原因呢? 我试图搜索但没有找到答案。这发生在我的 Ubuntu 16.04 和 CentOS 8 中。 提前致谢。

#include<unistd.h>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
void*  mmmm(void* args){
        int i=0;
        while(i<1000){
                printf("A:%d\n",i);
                i++;
                usleep(500000);
        //      sleep(0.5);
        }
        return NULL;
}
void* nnnn(void* args){
        int j=1000;
        while(j>0){
                printf("B:%d\n",j);
                j--;
                usleep(500000);
//              sleep(0.5);
        }
        return NULL;
}
int main(){
        pthread_t a,b;
        int errora = pthread_create(&a,NULL,mmmm,NULL);
        int errorb = pthread_create(&b,NULL,nnnn,NULL);
        printf("error A:%d,error B:%d\n",errora,errorb);

        int status_a,status_b;
        pthread_join(b,(void*)&status_b);
        pthread_join(a,(void*)&status_a);
        return 0;
}

【问题讨论】:

  • 睡眠采用无符号整数。当您提供 0.5 时,结果值是多少?您可能想要打开编译器警告 -W -Wall
  • 函数不会仅仅因为程序员希望改变它们声明的参数类型。就像以 1 美元硬币出售小吃店的自动售货机一样,如果您将 50 美分硬币放入美元硬币槽,则不会给您半个小吃店。

标签: c linux pthreads


【解决方案1】:

睡眠参数是无符号整数秒。 0.5 生成警告并假定为 0

“男人 3 睡觉”:

unsigned int sleep(unsigned int seconds);

【讨论】:

  • 哇!我明白了。非常感谢。
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2011-05-13
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多