下面是我在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线程组件添加到内核的详细步骤

最佳答案

您可以通过修改内核配置向内核添加组件。最简单的方法是在workbench中打开VxWorks图像项目,双击“内核配置”。这将启动组件配置编辑器,如下所示。
可以使用Find(至少在windows上是Ctrl-F)按组件名称进行搜索。
c - Vxworks RTP项目中pthread_create的ENOSYS错误-LMLPHP

关于c - Vxworks RTP项目中pthread_create的ENOSYS错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14022915/

10-11 16:15