Directory
eXtremeDB_rt/samples/multi_taskDescription
Demonstrates multi-threaded usage of an in-memory database
Used API
mco_db_connect(), mco_db_disconnect(), sample_open_database(), sample_close_database(), sample_start_task(), sample_join_task()
Code snippet
void a_task ( sample_task_t * descriptor ) { MCO_RET rc; char msg[32]; /* Every task has to make its own connection */ mco_db_h connection; /* Connection handle */ /* Connect to it by name */ rc = mco_db_connect( db_name, &connection ); ... if ( MCO_S_OK == rc ) { /* Database successfully connected */ /* Perform database tasks...*/ /* Don't forget to disconnect when done */ rc = mco_db_disconnect( connection ); ... sample_rc_check(msg, rc ); } } .... rc = sample_open_database( db_name, simpledb_get_dictionary(), DATABASE_SIZE, CACHE_SIZE, MEMORY_PAGE_SIZE, PSTORAGE_PAGE_SIZE, N_TASKS, &dbmem ); sample_rc_check("\tOpen database", rc ); if ( MCO_S_OK == rc ) { /* Task descriptors */ sample_task_t task[N_TASKS]; unsigned int i; /* Start the tasks */ for( i=0; i<sizeof(task)/sizeof(task[0]); i++ ) { #ifdef MCO_PLATFORM_X64 unsigned long long l = i; #else unsigned int l = i; #endif sample_start_task( &task[i], a_task, (void*) l ); printf("\n\tTask %d started", i ); } /* Wait for completion */ for( i=0; i<sizeof(task)/sizeof(task[0]); i++ ) { sample_join_task( &task[i] ); printf("\n\tTask %d joined", i ); } /* Close the database */ sample_close_database( db_name, &dbmem );What to expect as an output
Open database : Successful Task 0 started Connect Task 0 : Successful Disconnect Task 0 : Successful Task 1 started Connect Task 1 : Successful Disconnect Task 1 : Successful Task 2 started Task 3 started Connect Task 2 : Successful Disconnect Task 2 : Successful Connect Task 3 : Successful Disconnect Task 3 : Successful Task 4 started Connect Task 4 : Successful Task 0 joined Disconnect Task 4 : Successful Task 1 joined Task 2 joined Task 3 joined Task 4 joined Close database : Success