mirror of
https://github.com/MariaDB/server.git
synced 2025-01-24 07:44:22 +01:00
131 lines
2.4 KiB
C
131 lines
2.4 KiB
C
/************************************************************************
|
|
The test module for the thread management of Innobase
|
|
|
|
(c) 1995 Innobase Oy
|
|
|
|
Created 10/5/1995 Heikki Tuuri
|
|
*************************************************************************/
|
|
|
|
#include "../thr0loc.h"
|
|
#include "sync0sync.h"
|
|
#include "mem0mem.h"
|
|
#include "os0thread.h"
|
|
#include "os0sync.h"
|
|
#include "ut0ut.h"
|
|
|
|
ulint val = 500;
|
|
os_event_t event;
|
|
|
|
/******************************************************************
|
|
Thread start function in test1. */
|
|
|
|
ulint
|
|
thread1(
|
|
/*====*/
|
|
void* arg)
|
|
{
|
|
ulint n;
|
|
|
|
thr_local_create();
|
|
|
|
n = *((ulint*)arg);
|
|
|
|
printf("Thread %lu starts\n", n);
|
|
|
|
thr_local_set_slot_no(os_thread_get_curr_id(), n);
|
|
|
|
ut_a(n == thr_local_get_slot_no(os_thread_get_curr_id()));
|
|
|
|
os_event_wait(event);
|
|
|
|
thr_local_free();
|
|
|
|
os_thread_exit(0);
|
|
|
|
return(0);
|
|
}
|
|
|
|
/******************************************************************
|
|
Test function for local storage. */
|
|
|
|
void
|
|
test1(void)
|
|
/*=======*/
|
|
{
|
|
os_thread_t thr1, thr2, thr3, thr4, thr5;
|
|
os_thread_id_t id1, id2, id3, id4, id5;
|
|
ulint tm, oldtm;
|
|
ulint n1, n2, n3, n4, n5;
|
|
|
|
printf("-------------------------------------------\n");
|
|
printf("THR-TEST 1. Test of local storage\n");
|
|
|
|
event = os_event_create(NULL);
|
|
|
|
oldtm = ut_clock();
|
|
|
|
n1 = 1;
|
|
thr1 = os_thread_create(thread1,
|
|
&n1,
|
|
&id1);
|
|
n2 = 2;
|
|
thr2 = os_thread_create(thread1,
|
|
&n2,
|
|
&id2);
|
|
n3 = 3;
|
|
thr3 = os_thread_create(thread1,
|
|
&n3,
|
|
&id3);
|
|
n4 = 4;
|
|
thr4 = os_thread_create(thread1,
|
|
&n4,
|
|
&id4);
|
|
n5 = 5;
|
|
thr5 = os_thread_create(thread1,
|
|
&n5,
|
|
&id5);
|
|
|
|
os_thread_sleep(500000);
|
|
|
|
ut_a(n1 == thr_local_get_slot_no(id1));
|
|
ut_a(n2 == thr_local_get_slot_no(id2));
|
|
ut_a(n3 == thr_local_get_slot_no(id3));
|
|
ut_a(n4 == thr_local_get_slot_no(id4));
|
|
ut_a(n5 == thr_local_get_slot_no(id5));
|
|
|
|
os_event_set(event);
|
|
|
|
os_thread_wait(thr1);
|
|
os_thread_wait(thr2);
|
|
os_thread_wait(thr3);
|
|
os_thread_wait(thr4);
|
|
os_thread_wait(thr5);
|
|
|
|
tm = ut_clock();
|
|
printf("Wall clock time for 5 threads %ld milliseconds\n",
|
|
tm - oldtm);
|
|
}
|
|
|
|
/************************************************************************
|
|
Main test function. */
|
|
|
|
void
|
|
main(void)
|
|
/*======*/
|
|
{
|
|
ulint tm, oldtm;
|
|
|
|
sync_init();
|
|
mem_init();
|
|
thr_local_init();
|
|
|
|
oldtm = ut_clock();
|
|
|
|
test1();
|
|
|
|
thr_local_close();
|
|
|
|
tm = ut_clock();
|
|
printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);
|
|
printf("TESTS COMPLETED SUCCESSFULLY!\n");
|
|
}
|