为嵌入式设备编写如下类似的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;
}
答案 0 :(得分:7)
是
默认情况下,C ++标准库不是线程安全的......特别是像cout
这样的流对象。
它可能与嵌入的系统有关,也可能没有。桌面系统的标准库实现可能更加线程安全,或者恰好实现的方式略有不同,或者您在桌面上进行测试时没有观察到任何不良行为。