/** * @file log.c * @author myusgun */ #include "cf_log.h" #include "cf_mutex.h" #include "cf_thread.h" #include "cf_debug.h" #include CF_Mutex_Ctx globalMutex; #define LOG_MT 1 int test_log_mt (void * arg) { static int cnt = 0; int i = 0; int th = 0; if (CF_Mutex_Lock (globalMutex) < 0) { // for critical section // error } th = cnt++; if (CF_Mutex_Unlock (globalMutex) < 0) { // for critical section // error } CF_DEBUG_PRINT (stderr, "created %dth thread\n", th); for (i = 0 ; i < 10000 ; i++) { CF_Log_Write (LOG_MT, "LOG_MT", "[%d] multi-threadedlogging test %d\n", th, i); } CF_DEBUG_PRINT (stderr, "end %dth thread\n", th); return 0; } int main (void) { int i, j; char idname[16] = {0x00,}; CF_Thread_Ctx tid[10]; /* initialize */ if (CF_Log_Initialize (10) < 0) { fprintf (stderr, "failed to init. log\n"); return -1; } for (i = 0 ; i < 10 ; i++) { sprintf (idname, "logid%d.txt", i); if (CF_Log_Open (i, idname, CF_LOG_NO_BUFFER) < 0) fprintf (stderr, "failed to open log\n"); } for (i = 0 ; i < 10 ; i++) { for (j = 0 ; j < 10000 ; j++) { int result = CF_Log_Write (i, "LOG_ID_TEST", "turn %d\n", j); if (result < 0) fprintf (stderr, "failed to write log %d\n", result); } if (CF_Log_Close (i) < 0) fprintf (stderr, "failed to close log\n"); } /* mt {{{ */ if (CF_Log_Open (LOG_MT, "log_mt.txt", CF_LOG_DEFAULT_BUFFER) < 0) CF_DEBUG_PRINT (stderr, "create log ctx error\n"); if (CF_Log_SetMT (LOG_MT, CF_TRUE) < 0) CF_DEBUG_PRINT (stderr, "set multi-threading mode error\n"); if (CF_Mutex_CreateCtx (&globalMutex) < 0) { // error } for (i = 0 ; i < 10 ; i++) { if (CF_Thread_CreateCtx (&tid[i], test_log_mt, &i) < 0) { CF_DEBUG_PRINT (stderr, "failed to create %dth thread\n", i); return -2; } } for (i = 0 ; i < 10 ; i++) { if (CF_Thread_Start (tid[i]) < 0) { CF_DEBUG_PRINT (stderr, "failed to start %dth thread\n", i); return -3; } } for (i = 0 ; i < 10 ; i++) { if (CF_Thread_Join (tid[i]) < 0) CF_DEBUG_PRINT (stderr, "failed to join %dth thread\n", i); if (CF_Thread_DestroyCtx (tid[i]) < 0) CF_DEBUG_PRINT (stderr, "failed to release %dth thread\n", i); } if (CF_Mutex_DestoryCtx (globalMutex) < 0) { // error } /* }}} mt */ /* finalize */ CF_Log_Finalize (); return 0; }