⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsos.c

📁 Mysql for Windows最新源码
💻 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 + -