Age Owner TLA Line data Source code
1 : #include <stdint.h>
2 : #include <stdlib.h>
3 : #include "ecpg_config.h"
4 :
5 : #ifndef ENABLE_THREAD_SAFETY
6 : int
7 : main(void)
8 : {
9 : printf("No threading enabled.\n");
10 : return 0;
11 : }
12 : #else
13 : #ifdef WIN32
14 : #define WIN32_LEAN_AND_MEAN
15 : #include <windows.h>
16 : #include <process.h>
17 : #include <locale.h>
18 : #else
19 : #include <pthread.h>
20 : #endif
21 : #include <stdio.h>
22 :
23 : #define THREADS 16
24 : #define REPEATS 50
25 :
26 : exec sql include sqlca;
27 : exec sql include ../regression;
28 :
29 : exec sql whenever sqlerror sqlprint;
30 : exec sql whenever not found sqlprint;
31 :
32 : #ifdef WIN32
33 : static unsigned __stdcall fn(void* arg)
34 : #else
5670 meskes 35 CBC 16 : static void* fn(void* arg)
36 : #endif
37 : {
38 : int i;
39 :
40 : EXEC SQL BEGIN DECLARE SECTION;
41 : int value;
42 : char name[100];
5674 43 16 : char query[256] = "INSERT INTO T VALUES ( ? )";
44 : EXEC SQL END DECLARE SECTION;
45 :
1143 peter 46 16 : value = (intptr_t) arg;
5674 meskes 47 16 : sprintf(name, "Connection: %d", value);
48 :
49 16 : EXEC SQL CONNECT TO REGRESSDB1 AS :name;
50 16 : EXEC SQL SET AUTOCOMMIT TO ON;
51 816 : for (i = 1; i <= REPEATS; ++i)
52 : {
53 800 : EXEC SQL PREPARE I FROM :query;
54 800 : EXEC SQL EXECUTE I USING :value;
55 800 : }
56 16 : EXEC SQL DEALLOCATE I;
57 16 : EXEC SQL DISCONNECT :name;
58 16 :
59 16 : return 0;
60 : }
61 :
5072 62 1 : int main ()
63 : {
64 : intptr_t i;
65 : #ifdef WIN32
66 : HANDLE threads[THREADS];
67 : #else
68 : pthread_t threads[THREADS];
69 : #endif
70 :
5674 71 1 : EXEC SQL CONNECT TO REGRESSDB1;
72 1 : EXEC SQL SET AUTOCOMMIT TO ON;
73 1 : EXEC SQL DROP TABLE IF EXISTS T;
74 1 : EXEC SQL CREATE TABLE T ( i int );
75 1 : EXEC SQL DISCONNECT;
76 1 :
77 : #ifdef WIN32
78 : for (i = 0; i < THREADS; ++i)
79 : {
80 : unsigned id;
81 : threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, (void*)i, 0, &id);
82 : }
83 :
84 : WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
85 : for (i = 0; i < THREADS; ++i)
86 : CloseHandle(threads[i]);
87 : #else
88 17 : for (i = 0; i < THREADS; ++i)
1143 peter 89 16 : pthread_create(&threads[i], NULL, fn, (void *) i);
5674 meskes 90 17 : for (i = 0; i < THREADS; ++i)
91 16 : pthread_join(threads[i], NULL);
92 : #endif
93 :
94 1 : return 0;
95 : }
96 : #endif
|