sem_timedwait()对远程计算机不起作用

时间:2019-05-24 23:51:37

标签: c++ linux posix semaphore errno

我已经编写了一个用于线程同步的C ++程序。该程序适用于我的计算机,其操作系统为Ubuntu 16.04。在使用Ubuntu 18.04的远程计算机上运行程序时,会出现不同的行为。如果某些信号未按时到达,我只是使用Linux(man page)的sem_timedwait()函数导致超时。在这里,posix线程调用tfoundry(),它将等待信号sem1sem2继续执行。 5秒后,即使未收到信号之一,线程也必须停止运行。

struct Foundry{
    sem_t sem1;
    sem_t sem2;
    const struct timespec* abs_timeout;
    struct timeval currentTime;
    struct timespec ts;
};


void* tfoundry(void* f){
    Foundry* foundry = (Foundry*) f;
    sem_init(&(foundry->sem1), 0, 0);
    sem_init(&(foundry->sem2), 0, 0);
    foundry->abs_timeout = &(foundry->ts);
    gettimeofday(&(foundry->currentTime),NULL);
    // 5 sec for timeout
    foundry->ts.tv_sec = foundry->currentTime.tv_sec + 5; 
    if (sem_timedwait(&(foundry->sem1),foundry->abs_timeout) != 0) 
        exit(-1);

    if (sem_timedwait(&(foundry->sem2),foundry->abs_timeout) != 0) 
        exit(-1);
}

在我的计算机中,该线程等待5秒钟,如果还没有到达两个信号,它只会退出。但是在远程计算机上,它突然退出而无需等待5秒钟。我将不胜感激。

0 个答案:

没有答案