Pthread_create缓冲区大小.不够的

pthread_create buffer size. Not enough?

本文关键字:不够 缓冲区 create Pthread      更新时间:2023-10-16

我试图创建一个具有pthread_create函数的线程。呼叫是这样的:res pthread_create(&threadID, &atributte, function, argument)

res的值总是0,这意味着pthread_create启动线程的权利。问题,我认为,是在最后一个参数(参数)。这是一个太长的字符串,我认为这会使我的程序崩溃,因为如果我尝试使用更短的字符串,它都是正确的,并正确结束。

我想知道pthread_create是否创建了一个具有一定内存量的线程,如果你们有人知道这个量。

PD:我的日志没有显示任何东西,我在function的第一行放了一个cout,但从未被读取,因为我的程序在它发生之前崩溃了。

谢谢大家!

编辑:剩下的代码,我如何创建线程。
    void znkModulePlugin::createMainProcess(void* mod){
znkModulePlugin* module = static_cast<znkModulePlugin*>(mod);
try{
    int res = 0;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    res = pthread_create(&threadID, &attr, znkModulePlugin::launchThread, module); 
}catch(exception e){
    stringstream log_msg;
    log_msg << " CRIT znkModulePlugin::createMainProcess() -> Critical Error: " << e.what() << ". Reseting Node.";
    logData(log_msg.str());
}

}

遵循以下模式来避免问题:

1)分配一个new对象/结构体来保存新线程需要的信息。

2)调用pthread_create,传递一个指向新对象的指针。

3)当线程完成对信息的访问,delete对象/结构。

如果你给一个线程传递一个指针,你必须确保这个指针保持有效(除非同步,否则它的内容不会被修改),直到新线程完成它。