以下c ++线程代码会导致嵌入式系统上的进程崩溃吗?

时间:2011-09-26 09:36:38

标签: c++ pthreads

为嵌入式设备编写如下类似的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 个答案:

答案 0 :(得分:7)

默认情况下,C ++标准库不是线程安全的......特别是像cout这样的流对象。

它可能与嵌入的系统有关,也可能没有。桌面系统的标准库实现可能更加线程安全,或者恰好实现的方式略有不同,或者您在桌面上进行测试时没有观察到任何不良行为。