C:nanosleep()和usleep()失败

时间:2015-08-08 09:13:01

标签: c xcode multithreading pthreads

为什么nanosleep()的实施失败了?我在Mac上使用Xcode,错误是: Thread 2: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

void msleep3(int msec)
{
    struct timespec interval;
    struct timespec remainder;

    interval.tv_sec = msec / 1000;
    interval.tv_nsec = (msec % 1000) * (1000 * 1000);

    if (nanosleep(&interval, &remainder) == -1) {
        if (errno == EINTR) {
            printf("nanosleep interrupted\n");
            printf("Remaining secs: %ld", remainder.tv_sec);
            printf("Remaining nsecs: %ld", remainder.tv_nsec);
        } 

        else if (errno == EINVAL)
            printf("errno == EINVAL\n");

        else {
            perror("nanosleep");
            exit(EXIT_FAILURE);
        }
    }
}

错误位于nanosleep()返回的行中,任何if / if else / else都不会捕获此错误。在我的程序中,有2个线程。出现问题时,线程1在sleep()函数上,线程2在调用nanosleep()时生成错误。

EDIT1:问题并不总是发生,但是当我启动程序时,我必须等待几秒钟或几分钟才能发生崩溃。

EDIT2: Xcode在关于线程2的进程视图中给出了这个问题: _os_lock_corruption_abort。如果我点击这个,我有: libsystem_platform.dylib _os_lock_corruption_abort: -> 0x7fff8da21caf <+0>: ud2

0 个答案:

没有答案