コード例 #1
0
ファイル: mempool.c プロジェクト: AlexandriteTH/Hercules
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()
コード例 #2
0
ファイル: mempool.c プロジェクト: Mateuus/brathena-1
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()
コード例 #3
0
ファイル: test_spinlock.c プロジェクト: AbbottWC/Hercules
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()
コード例 #4
0
ファイル: thread.c プロジェクト: Developerment/Hercules
///
/// API Level
///
rAthread rathread_create( rAthreadProc entryPoint,  void *param ){
	return rathread_createEx( entryPoint, param,  (1<<23) /*8MB*/,  RAT_PRIO_NORMAL );
}//end: rathread_create()