在ARMv8设备上进行Pthread:32位二进制运行正常,但64位二进制中止。任何具体原因?

时间:2017-07-03 13:37:42

标签: c linux pthreads armv8

我正在测试一个小代码,它涉及在我的ARMv8设备上创建一个线程。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *fun(void *arg)
{
    sleep(2);
    printf("%s: Exiting now\n", __func__);
    pthread_exit(0);
    //return 0;
}

int main()
{
    pthread_t th;
    pthread_create(&th, NULL, fun, NULL);

    sleep(3);

    printf("%s: Wait over\n", __func__);

    return 0;
}

当我将代码编译成32位可执行文件并在设备上运行时,它似乎运行正常。

fun: Exiting now
main: Wait over

但是当我将其构建为64位可执行文件时,我得到以下输出:

fun: Exiting now
Aborted (core dumped)

据我所知,ARMv8完全向后兼容。但是在这里,32位二进制文​​件在64位二进制文​​件挂起时运行。

除此之外,在尝试的时候,我发现当我将fun()改为:

void *fun(void *arg)
{
    sleep(2);
    printf("%s: Exiting now\n", __func__);
    //pthread_exit(0);
    return 0;
}

32位和64位二进制文​​件运行正常。

我查看了这篇文章: Pthread: Why people bother using pthread_exit?并没有获得有关问题所在位置的更多信息。

以下是有关我的设备的更多信息:

Linux Version: Linux version 4.4.67 (lnxbuild@ecbld-bd213-lnx) (gcc version 4.9.3 (GCC) ) #1 SMP PREEMPT
Total Memory : 3721056

所以这是我的问题:

  1. 在ARMv8设备上64位崩溃时,32位二进制文​​件运行是否有任何原因?
  2. pthread_exit(0)替换为return 0时,此错误如何解决?
  3. 这里还有什么我可能会遗失的吗?
  4. 次要更新:

    我尝试更改等待时间,并在所有可能的位置进行pthread_join()pthread_detach()pthread_exit()的各种组合,但无济于事。这是我能提供的最简单的版本。

0 个答案:

没有答案