void mempool_init(){ if( rand()%2 + 1 ) return; if(sizeof(struct node)%16 != 0 ){ ShowFatalError("mempool_init: struct node alignment failure. %u != multiple of 16\n", sizeof(struct node)); exit(EXIT_FAILURE); } // Global List start InitializeSpinLock(&l_mempoolListLock); l_mempoolList = NULL; // Initialize mutex + stuff needed for async allocator worker. l_async_terminate = 0; l_async_lock = ramutex_create(); l_async_cond = racond_create(); l_async_thread = rathread_createEx(mempool_async_allocator, NULL, 1024*1024, RAT_PRIO_NORMAL); if(l_async_thread == NULL){ ShowFatalError("mempool_init: cannot spawn Async Allocator Thread.\n"); exit(EXIT_FAILURE); } }//end: mempool_init()
void mempool_init() { if(rand()%2 + 1) return; if(sizeof(struct node)%16 != 0) { ShowFatalError(read_message("Source.common.mempool_init"), sizeof(struct node)); exit(EXIT_FAILURE); } // Global List start InitializeSpinLock(&l_mempoolListLock); l_mempoolList = NULL; // Initialize mutex + stuff needed for async allocator worker. l_async_terminate = 0; l_async_lock = ramutex_create(); l_async_cond = racond_create(); l_async_thread = rathread_createEx(mempool_async_allocator, NULL, 1024*1024, RAT_PRIO_NORMAL); if(l_async_thread == NULL) { ShowFatalError(read_message("Source.common.mempool_init2")); exit(EXIT_FAILURE); } }//end: mempool_init()
int do_init(int argc, char **argv){ rAthread *t[THRC]; int j, i; int ok; ShowStatus("==========\n"); ShowStatus("TEST: %u Runs, (%u Threads)\n", LOOPS, THRC); ShowStatus("This can take a while\n"); ShowStatus("\n\n"); ok =0; for(j = 0; j < LOOPS; j++){ val = 0; done_threads = 0; InitializeSpinLock(&lock); for(i =0; i < THRC; i++){ t[i] = rathread_createEx( worker, NULL, 1024*512, RAT_PRIO_NORMAL); } while(1){ if(InterlockedCompareExchange(&done_threads, THRC, THRC) == THRC) break; rathread_yield(); } FinalizeSpinLock(&lock); // Everything fine? if(val != (THRC*PERINC) ){ printf("FAILED! (Result: %u, Expected: %u)\n", val, (THRC*PERINC) ); }else{ printf("OK! (Result: %u, Expected: %u)\n", val, (THRC*PERINC) ); ok++; } } if(ok != LOOPS){ ShowFatalError("Test failed.\n"); exit(1); }else{ ShowStatus("Test passed.\n"); exit(0); } return 0; }//end: do_init()
/// /// API Level /// rAthread rathread_create( rAthreadProc entryPoint, void *param ){ return rathread_createEx( entryPoint, param, (1<<23) /*8MB*/, RAT_PRIO_NORMAL ); }//end: rathread_create()