|
rpm-build |
2ca94e |
/**
|
|
rpm-build |
2ca94e |
* hdr_thread.c
|
|
rpm-build |
2ca94e |
* Written by Philip Orwig and released to the public domain,
|
|
rpm-build |
2ca94e |
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
|
rpm-build |
2ca94e |
*/
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#include <stdlib.h>
|
|
rpm-build |
2ca94e |
#include "hdr_thread.h"
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
struct hdr_mutex* hdr_mutex_alloc(void)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
return malloc(sizeof(hdr_mutex));
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_free(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
free(mutex);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#if !defined(WIN32_LEAN_AND_MEAN)
|
|
rpm-build |
2ca94e |
#define WIN32_LEAN_AND_MEAN
|
|
rpm-build |
2ca94e |
#endif
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#include <windows.h>
|
|
rpm-build |
2ca94e |
#include <WinSock2.h>
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
int hdr_mutex_init(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
InitializeCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
|
rpm-build |
2ca94e |
return 0;
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_destroy(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
DeleteCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_lock(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
EnterCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_unlock(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
LeaveCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_yield()
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
Sleep(0);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
int hdr_usleep(unsigned int useconds)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
struct timeval tv;
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
tv.tv_sec = (long)useconds / 1000000;
|
|
rpm-build |
2ca94e |
tv.tv_usec = useconds % 1000000;
|
|
rpm-build |
2ca94e |
select(0, NULL, NULL, NULL, &tv;;
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
return 0;
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#else
|
|
rpm-build |
2ca94e |
#include <pthread.h>
|
|
rpm-build |
2ca94e |
#include <unistd.h>
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
int hdr_mutex_init(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
return pthread_mutex_init(&mutex->_mutex, NULL);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_destroy(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
pthread_mutex_destroy(&mutex->_mutex);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_lock(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
pthread_mutex_lock(&mutex->_mutex);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_mutex_unlock(struct hdr_mutex* mutex)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
pthread_mutex_unlock(&mutex->_mutex);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
void hdr_yield()
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
sched_yield();
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
int hdr_usleep(unsigned int useconds)
|
|
rpm-build |
2ca94e |
{
|
|
rpm-build |
2ca94e |
return usleep(useconds);
|
|
rpm-build |
2ca94e |
}
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
|
|
rpm-build |
2ca94e |
#endif
|