调用 pthread_create() C++ Linux 时的段错误



一段时间没来这里了,但我被困住了...我似乎无法弄清楚此代码的问题出在哪里

记录器.cpp

#include "logger.h"
#include <unistd.h>
#include <stdlib.h>
void* __logger(void* data)  // dummy function
{
    sleep(10);
    return NULL;
}
logger_t::logger_t()
{
    // create a pipe for communicating with thread
    if (pipe(fd) == -1) // something went wrong
    {
        // error here
        exit(EXIT_FAILURE);
    }
    // now create the thread that will write to the log
    if (pthread_create(log_pid, NULL, &__logger, NULL))  // something went wrong
    {
        exit(EXIT_FAILURE);
    }
}
logger_t::~logger_t()
{
    close(fd[1]);     // close read end of pipe, logging thread will read EOF and exit
    if (pthread_join(*log_pid, NULL))
    {
        exit(EXIT_FAILURE);
    }
}

logger.h

#ifndef LOGGER_H
#define LOGGER_H
#include <pthread.h>
class logger_t
{
    public:
        logger_t();
        ~logger_t();
    private:
        int fd[2];
        pthread_t* log_pid;
};
#endif // LOGGER_H

主.cpp

#include "logger.h"
int main()
{
    logger_t proglog;
    return 0;
}

代码编译得很好,但是当我运行它时,我在 pthread_create(( 调用期间出现分段错误......有什么想法吗?我已经剥离了程序中的所有内容,但我仍然得到同样的崩溃......

pthread_create() 的手册页:

在返回之前,成功调用 pthread_create(( 会存储 ID 线程指向的缓冲区中的新线程;

thread参数应指向有效内容 - 在您的情况下,您正在传入未初始化的指针。也许这与它有关。若要确认,请在调试器(如 gdb(中运行它并查看。

另外,正如您指出这是c ++一样,您确实应该使用std::thread()

相关内容

  • 没有找到相关文章

最新更新