Sha256: f8f290b8283f6c74dda21a15cce086f68f9d14fe074b7ed6938431bb04e2c42b

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

#include <stdlib.h>
#include <stdint.h>
#include "threading.h"

#if defined (__unix__) || defined (__APPLE_CC__)
# include <pthread.h>
# include <unistd.h>

void*
_seal_create_thread(_seal_routine_t* routine, void* args)
{
    pthread_t thread;

    pthread_create(&thread, 0, routine, args);

    return (void*) thread;
}

void
_seal_join_thread(void* thread)
{
    pthread_join((pthread_t) thread, 0);
}

int
_seal_calling_thread_is(void* thread)
{
    return pthread_self() == (pthread_t) thread;
}

#elif defined (_WIN32)
# define _WIN32_WINNT 0x0500
# include <Windows.h>

void*
_seal_create_thread(_seal_routine_t* routine, void* args)
{
    DWORD thread;

    CloseHandle(CreateThread(
        0,
        0,
        (LPTHREAD_START_ROUTINE) routine,
        args,
        0,
        &thread
    ));

    return (void*) thread;
}

void
_seal_join_thread(void* thread)
{
    HANDLE thread_handle = OpenThread(SYNCHRONIZE, 0, (DWORD) thread);
    WaitForSingleObject(thread_handle, INFINITE);
    CloseHandle(thread_handle);
}

int
_seal_calling_thread_is(void* thread)
{
    return GetCurrentThreadId() == (DWORD) thread;
}

#endif /* __unix__, _WIN32 */

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
seal-0.1.3 src/seal/threading.c
seal-0.1.2 src/seal/threading.c