0

単純なスレッドを管理するプログラムを作成しようとしています。これがメインプログラムです:

int main(int argc, char **argv)
{
  printf("test2:\n--------------\n");
  clock_t stop1;

  uthread_init(100);
  printf ("***%d***\n",uthread_get_tid());
  if(uthread_spawn(f1)==-1)
        printf("FAIL: uthread_spawn failure\n");

  stop1 = clock () + 0.05 * CLOCKS_PER_SEC;
  int i;    
  printf ("StartLoop of thread: ***%d***\n",uthread_get_tid());
  while(clock ()<stop1) {
    for(i=0;i<10000000;i++) {}
  }
  printf ("FinishLoop of thread: ***%d***\n",uthread_get_tid());

  uthread_terminate(0);
  return 0;
}

コードは新しいスレッドを作成し、それが新しいスレッドを作成し、それが新しいスレッドを作成します。3/3 の作成中にエラーが発生します。プログラムはここでスタックします(スレッド関数の作成中):

int uthread_spawn(void (*f)(void)) {
DBG(("Spawning !"))
        //checking if number of threads is bigger then max
if (getThreadCount() > MAX_THREAD_NUM){
    errmsgLibrary(MAX_THREADS_LIM);
    return FAIL;
}

// TODO - Check if needed to block/unblock here
if (blockTimerSignal(BLOCK) == SUCCESS){
    DBG(("Block signal success"))
    DBG(("ntid value: %d",nTid))
    pThread t = new Thread(f,nTid++);
    DBG(("new thread created"))
    t->setState(Thread::READY);
    ready.push_back(t);
    DBG(("Added new Thread - %d",(nTid-1)))
    DBG(("Number of threads in ready list is  - %d",(ready.size())))
    blockTimerSignal(UNBLOCK);
    return (nTid-1);
}
DBG(("Block signal not success"))
return FAIL;
}

新しい Thread() を作成しようとしている間。

私が得るエラーは次のとおりです。

test02-new: malloc.c:5161: malloc_consolidate: Assertion `p->fd_nextsize->bk_nextsize == p' failed.
Abort
4

0 に答える 0