为什么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