Может ли приведенный ниже код потока C ++ вызвать сбой процесса во встроенной системе? - PullRequest
0 голосов
/ 26 сентября 2011

код C ++, подобный приведенному ниже, написан для встроенного устройства.процесс, запущенный на устройстве, падает при запуске.на некоторых других версиях устройства сбоя не наблюдается.может ли это быть связано с вызываемым аргументом потока и отсоединением потока.на обычном окружении рабочего стола Linux он не падает.Может кто-нибудь, пожалуйста, дайте свои комментарии.Заранее спасибо.

#include <pthread.h>
#include <iostream>

using namespace std;


#define NUM_THREADS     2

void *PrintHello(void *msg)
{
    cout<<(char*)msg<<endl;
    while(1)
    {
        printf("Hello World! It's me, thread !\n");
        sleep(2);
    }
}


int main (int argc, char *argv[])
{
    pthread_t threads[NUM_THREADS];
    int rc;
    long t;
    const char* ch = "hello how r u.i'm passing argument";
    for(t=0; t<NUM_THREADS; t++)
    {
        printf("In main: creating thread %ld\n", t);
        rc = pthread_create(&threads[t], NULL, PrintHello, (void *)ch);
        pthread_detach(threads[t]);
        if (rc)
        {
            printf("ERROR; return code from pthread_create() is %d\n", rc);
            exit(-1);
        }
     }
     return 0;
}

1 Ответ

7 голосов
/ 26 сентября 2011

Да.

Стандартная библиотека C ++ по умолчанию не является поточно-ориентированной ... потоковые объекты, например, cout.

Может иметь или не иметь ничего дляделать со встроенной системой.Возможно, стандартная реализация библиотеки для настольной системы более поточно-ориентирована, или она реализована несколько иначе, или, возможно, вам просто не повезло, что вы не наблюдали нежелательного поведения при тестировании на настольном компьютере.

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