mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
75 lines
1.3 KiB
Plaintext
75 lines
1.3 KiB
Plaintext
#ifdef ENABLE_THREAD_SAFETY
|
|
#ifdef WIN32
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
#include <process.h>
|
|
#include <locale.h>
|
|
#else
|
|
#include <pthread.h>
|
|
#endif
|
|
#endif
|
|
#include <stdio.h>
|
|
|
|
#define THREADS 16
|
|
#define REPEATS 50000
|
|
|
|
EXEC SQL include sqlca;
|
|
EXEC SQL whenever sqlerror sqlprint;
|
|
EXEC SQL whenever not found sqlprint;
|
|
|
|
#if defined(ENABLE_THREAD_SAFETY) && defined(WIN32)
|
|
static unsigned __stdcall fn(void* arg)
|
|
#else
|
|
static void* fn(void* arg)
|
|
#endif
|
|
{
|
|
int i;
|
|
|
|
#ifdef WIN32
|
|
#ifdef _MSC_VER /* requires MSVC */
|
|
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
|
|
#endif
|
|
#endif
|
|
|
|
for (i = 1; i <= REPEATS; ++i)
|
|
{
|
|
EXEC SQL ALLOCATE DESCRIPTOR mydesc;
|
|
EXEC SQL DEALLOCATE DESCRIPTOR mydesc;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int main ()
|
|
{
|
|
#ifdef ENABLE_THREAD_SAFETY
|
|
int i;
|
|
#ifdef WIN32
|
|
HANDLE threads[THREADS];
|
|
#else
|
|
pthread_t threads[THREADS];
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
for (i = 0; i < THREADS; ++i)
|
|
{
|
|
unsigned id;
|
|
threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, NULL, 0, &id);
|
|
}
|
|
|
|
WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
|
|
for (i = 0; i < THREADS; ++i)
|
|
CloseHandle(threads[i]);
|
|
#else
|
|
for (i = 0; i < THREADS; ++i)
|
|
pthread_create(&threads[i], NULL, fn, NULL);
|
|
for (i = 0; i < THREADS; ++i)
|
|
pthread_join(threads[i], NULL);
|
|
#endif
|
|
#else
|
|
fn(NULL);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|