在GNU C中,deos主线程调用构造函数?

zi8p0yeb  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(142)

在GNU C中,deos主线程调用构造函数?
我libhello.so使用hello.c文件创建www.example.com库文件,并使用GCC运行main.c文件。结果是在hello.c构造函数和主函数中打印线程id是相同的。
这是一个正确的功能吗?我在网上找不到确切的信息。

// hello.c
#include <stdint.h>
#include <pthread.h>
#include <stdio.h>

void __attribute__((constructor)) func(void)
{
    uint64_t thread_id = pthread_self();
    printf("in constructor, thread id: %lu\n", thread_id);

    return;
}

void hello(void)
{
    printf("hello\n");

    return;
}

个字符

mrzz3bfm

mrzz3bfm1#

用constructor属性标记的函数在包含它们的(共享)对象被加载和初始化时由C运行时调用。对于进程可执行文件和所有直接链接到它的库,这发生在输入 * main之前,并且偶然发生在同一个线程中,最终将用于调用main
对于在运行时使用dlopen加载的共享对象/动态库,静态构造函数通常由进行dlopen调用的同一线程调用。
请注意,这一切都是偶然的,而不是一成不变的!实现者将来可能会将构造函数的执行分派给单独的线程,并在调用线程中等待结果。

相关问题