📄 tsos.c
字号:
/************************************************************************The test module for the operating system interface(c) 1995 Innobase OyCreated 9/27/1995 Heikki Tuuri*************************************************************************/#include "../os0thread.h"#include "../os0shm.h"#include "../os0proc.h"#include "../os0sync.h"#include "../os0file.h"#include "ut0ut.h"#include "sync0sync.h"#include "mem0mem.h"ulint last_thr = 1;byte global_buf[1000000];os_file_t file;os_file_t file2;os_event_t gl_ready;mutex_t ios_mutex;ulint ios;/************************************************************************Io-handler thread function. */ulinthandler_thread(/*===========*/ void* arg){ ulint segment; void* mess; ulint i; bool ret; segment = *((ulint*)arg); printf("Thread %lu starts\n", segment); for (i = 0;; i++) { ret = os_aio_wait(segment, &mess); mutex_enter(&ios_mutex); ios++; mutex_exit(&ios_mutex); ut_a(ret);/* printf("Message for thread %lu %lu\n", segment, (ulint)mess); */ if ((ulint)mess == 3333) { os_event_set(gl_ready); } } return(0);}/************************************************************************Test of io-handler threads */void test4(void)/*=======*/{ ulint i; bool ret; void* buf; ulint rnd; ulint tm, oldtm; os_thread_t thr[5]; os_thread_id_t id[5]; ulint n[5]; printf("-------------------------------------------\n"); printf("OS-TEST 4. Test of asynchronous file io\n"); /* Align the buffer for file io */ buf = (void*)(((ulint)global_buf + 6300) & (~0xFFF)); gl_ready = os_event_create(NULL); ios = 0; sync_init(); mem_init(); mutex_create(&ios_mutex); for (i = 0; i < 5; i++) { n[i] = i; thr[i] = os_thread_create(handler_thread, n + i, id + i); } rnd = 0; oldtm = ut_clock(); for (i = 0; i < 4096; i++) { ret = os_aio_read(file, (byte*)buf + 8192 * (rnd % 100), 8192 * (rnd % 4096), 0, 8192, (void*)i); ut_a(ret); rnd += 1; } ret = os_aio_read(file, buf, 8192 * (rnd % 1024), 0, 8192, (void*)3333); ut_a(ret); ut_a(!os_aio_all_slots_free()); tm = ut_clock(); printf("All ios queued! N ios: %lu\n", ios); printf("Wall clock time for test %lu milliseconds\n", tm - oldtm); os_event_wait(gl_ready); tm = ut_clock(); printf("N ios: %lu\n", ios); printf("Wall clock time for test %lu milliseconds\n", tm - oldtm); os_thread_sleep(2000000); printf("N ios: %lu\n", ios); ut_a(os_aio_all_slots_free());}/*************************************************************************Initializes the asyncronous io system for tests. */voidinit_aio(void)/*==========*/{ bool ret; void* buf; buf = (void*)(((ulint)global_buf + 6300) & (~0xFFF)); os_aio_init(160, 5); file = os_file_create("j:\\tsfile4", OS_FILE_CREATE, OS_FILE_TABLESPACE, &ret); if (ret == FALSE) { ut_a(os_file_get_last_error() == OS_FILE_ALREADY_EXISTS); file = os_file_create("j:\\tsfile4", OS_FILE_OPEN, OS_FILE_TABLESPACE, &ret); ut_a(ret); }}/************************************************************************Main test function. */void main(void) /*======*/{ ulint tm, oldtm; oldtm = ut_clock(); init_aio(); test4(); tm = ut_clock(); printf("Wall clock time for test %lu milliseconds\n", tm - oldtm); printf("TESTS COMPLETED SUCCESSFULLY!\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -