1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-07-06 16:25:59 +02:00

Lazy<T>, LazyTLS<T>, thread dtors

This commit is contained in:
Brian Fiete 2022-07-04 10:20:38 -07:00
parent cf269db0eb
commit a27ef9beda
17 changed files with 437 additions and 30 deletions

View file

@ -223,6 +223,7 @@ enum BfpThreadCreateFlags
};
typedef void (BFP_CALLTYPE *BfpThreadStartProc)(void* threadParam);
typedef void (BFP_CALLTYPE* BfpTLSProc)(void* threadParam);
enum BfpThreadPriority
{
@ -273,8 +274,9 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Enter(BfpCritSect* critSect);
BFP_EXPORT bool BFP_CALLTYPE BfpCritSect_TryEnter(BfpCritSect* critSect, int waitMS);
BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect);
struct BfpTLS;
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create();
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc);
BFP_EXPORT void BFP_CALLTYPE BfpTLS_Release(BfpTLS* tls);
BFP_EXPORT void BFP_CALLTYPE BfpTLS_SetValue(BfpTLS* tls, void* value);
BFP_EXPORT void* BFP_CALLTYPE BfpTLS_GetValue(BfpTLS* tls);

View file

@ -1528,10 +1528,10 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect)
pthread_mutex_unlock(&critSect->mPMutex);
}
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create()
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc)
{
pthread_key_t key = 0;
pthread_key_create(&key, NULL);
pthread_key_create(&key, exitProc);
return (BfpTLS*)(intptr)key;
}

View file

@ -2530,24 +2530,24 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect)
#define BFPTLS_TO_DWORD(val) ((DWORD)(intptr)(val))
struct BfpTLS;
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create()
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc)
{
return DWORD_TO_BFPTLS(::TlsAlloc());
return DWORD_TO_BFPTLS(::FlsAlloc(exitProc));
}
BFP_EXPORT void BFP_CALLTYPE BfpTLS_Release(BfpTLS* tls)
{
::TlsFree(BFPTLS_TO_DWORD(tls));
::FlsFree(BFPTLS_TO_DWORD(tls));
}
BFP_EXPORT void BFP_CALLTYPE BfpTLS_SetValue(BfpTLS* tls, void* value)
{
::TlsSetValue(BFPTLS_TO_DWORD(tls), value);
::FlsSetValue(BFPTLS_TO_DWORD(tls), value);
}
BFP_EXPORT void* BFP_CALLTYPE BfpTLS_GetValue(BfpTLS* tls)
{
return ::TlsGetValue(BFPTLS_TO_DWORD(tls));
return ::FlsGetValue(BFPTLS_TO_DWORD(tls));
}
BFP_EXPORT BfpEvent* BFP_CALLTYPE BfpEvent_Create(BfpEventFlags flags)