小编loc*_*hii的帖子

OSX上的总线错误 - pthreads

我试图了解以下内容:

有一个小程序我试图移植到OSX(intel)通过pthread_create调用函数doWork(),在函数中,我首先创建一个像这样的长数组:

long myarray[DIMENSION]

在OSX上,对于以下DIMENSION值,我得到以下内容:

0->65434 = fine
65435->67037 = SIGBUS
67037+ = SIGSEGV

我在这里完全感到困惑,我知道SIGBUS通常是由于内存对齐问题,我检查了sizeof(long),在这个平台上看起来似乎是8.有人能指出我应该在这里阅读的文档的正确方向吗?

这是来源:


#include pthread.h
#include stdio.h
#define NUM_THREADS     5
#define DIMENSION       12345

void *doStuff(void *threadid)
{
   long array[DIMENSION];
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0; t lt NUM_THREADS; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, doStuff, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }
   } …
Run Code Online (Sandbox Code Playgroud)

c macos pthreads

2
推荐指数
1
解决办法
1261
查看次数

标签 统计

c ×1

macos ×1

pthreads ×1