Boost :: потоки работают в отладке, не в выпуске - PullRequest
2 голосов
/ 31 августа 2011

Я начал создавать потоки около часа назад, и у меня возникли некоторые проблемы, когда режим отладки выполняет то, что я ожидал, а режим выпуска обнуляется.

Debug

g ++ -c -g -MMD -MP -MF build / Debug / GNU-Linux-x86 / foo.o.d -o build / Debug / GNU-Linux-x86 / foo.o foo.cpp

2222222222

Release

g ++ -c -O2 -MMD -MP -MF build / Release / GNU-Linux-x86 / foo.o.d -o build / Release / GNU-Linux-x86 / foo.o foo.cpp

Независимо от

RUN FAILED (значение выхода 1, общее время: 49 мс)

Класс

#include "foo.h"
#define NUMINSIDE 10

foo::foo()
{
    inside = new int[NUMINSIDE];
}

void foo::workerFunc(int input)
{
    for (int i = 0; i < NUMINSIDE; i++)
    {
        inside[i] += input;
    }
}

void foo::operate()
{
    std::cout << "Whatever" << std::endl;
    boost::thread thA(boost::bind(&foo::workerFunc, this, 1));
    boost::thread thB(boost::bind(&foo::workerFunc, this, 1));
    thA.join();
    thB.join();
    for (int i = 0; i < NUMINSIDE; i++)
    {
        std::cout << this->inside[i] << std::endl;
    }
}

основной

int main(int argc, char** argv)
{
    foo* myFoo = new foo();
    myFoo->operate();
    return 0;
}

1 Ответ

1 голос
/ 31 августа 2011

Вы не инициализировали inside массив. Добавить код инициализации к foo::foo()

foo::foo()
{
    inside = new int[NUMINSIDE];
    for (int i = 0; i < NUMINSIDE; i++)
    {
        inside[i] = 0;
    }
}

Это работает только в отладке, потому что это неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...