1

下面是我用来在 Vxworks 的 RTP 项目中测试线程功能的简单代码

#define NUM_THREADS 2 

void *PrintHello(void *threadid) 
{ 
    long tid = 0;   
    tid = (long)threadid;
    printf("Hello World! It's me, thread #%ld!\n", tid);
    pthread_exit(NULL); 
    return NULL;
} 

int main ()
{ 
  int rc;   
  long t;   
  pthread_t threads[NUM_THREADS];   
  pthread_attr_t attr;

  pthread_attr_init(&attr);

  for(t=0; t<NUM_THREADS; t++)  
  {     
    printf("In main: creating thread is : %ld\n", t);   
    rc = pthread_create(&threads[t], &attr, PrintHello, (void *)t); 
    if (rc) printf("ERROR; return code from pthread_create() is : %d\n", rc);   
    //pthread_join(threads[t],NULL);    
  } 
  pthread_exit(NULL);   
  return 0;
}

输出 :

In main: creating thread is : 0 ERROR; return code from pthread_create() is : 71 
In main: creating thread is : 1 ERROR; return code from pthread_create() is : 71

错误“71”点对应于“ENOSYS”错误代码,根据搜索发现 Vxworks 内核中未启用 POSIX 线程组件。

vxWorks pthreads帖子也与此相关。但我不确定我需要在哪个文件中启用“INCLUDE_POSIX_PTHREAD_SCHEDULER”组件(configRtp.mk/*.cdf 文件)。请提供有关如何将 POSIX 线程组件添加到内核的详细步骤

4

1 回答 1

1

您可以通过修改内核配置将组件添加到内核。最简单的方法是在工作台中打开 VxWorks Image Project,然后双击“Kernel Configuration”。这应该会启动组件配置编辑器,如下所示。

您可以使用“查找”(至少在 Windows 上为 Ctrl-F)按组件名称进行搜索。

组件配置

于 2016-11-11T12:44:57.520 回答