Revert "Work on replacing pthread with std::thread"

This reverts commit f82ebe19bd.
This commit is contained in:
Deukhoofd 2022-02-11 13:42:28 +01:00
parent 1f29d41b08
commit c239ac5220
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
3 changed files with 4 additions and 69 deletions

View File

@ -998,7 +998,7 @@
#define AS_MAX_PORTABILITY #define AS_MAX_PORTABILITY
#endif #endif
#define AS_LINUX #define AS_LINUX
#define AS_STD_THREADS #define AS_POSIX_THREADS
#if !( ( (__GNUC__ == 4) && (__GNUC_MINOR__ >= 1) || __GNUC__ > 4) ) #if !( ( (__GNUC__ == 4) && (__GNUC_MINOR__ >= 1) || __GNUC__ > 4) )
// Only with GCC 4.1 was the atomic instructions available // Only with GCC 4.1 was the atomic instructions available
@ -1273,7 +1273,7 @@
// If the form of threads to use hasn't been chosen // If the form of threads to use hasn't been chosen
// then the library will be compiled without support // then the library will be compiled without support
// for multithreading // for multithreading
#if !defined(AS_POSIX_THREADS) && !defined(AS_WINDOWS_THREADS) && !defined(AS_STD_THREADS) #if !defined(AS_POSIX_THREADS) && !defined(AS_WINDOWS_THREADS)
#define AS_NO_THREADS #define AS_NO_THREADS
#endif #endif

View File

@ -179,45 +179,6 @@ protected:
// but it gives a compiler error on MSVC6 so I'm leaving it outside // but it gives a compiler error on MSVC6 so I'm leaving it outside
static const asUINT maxReaders = 10; static const asUINT maxReaders = 10;
#elif defined(AS_STD_THREADS)
END_AS_NAMESPACE
#include <thread>
#include <mutex>
#include <shared_mutex>
BEGIN_AS_NAMESPACE
class asCThreadCriticalSection
{
public:
asCThreadCriticalSection();
~asCThreadCriticalSection();
void Enter();
void Leave();
bool TryEnter();
protected:
std::mutex _mutex;
};
class asCThreadReadWriteLock
{
public:
asCThreadReadWriteLock();
~asCThreadReadWriteLock();
void AcquireExclusive();
void ReleaseExclusive();
bool TryAcquireExclusive();
void AcquireShared();
void ReleaseShared();
bool TryAcquireShared();
protected:
std::shared_mutex _mutex;
};
#endif #endif
#endif #endif

View File

@ -226,10 +226,6 @@ asCThreadManager::~asCThreadManager()
#endif #endif
} }
#if defined(AS_STD_THREADS)
thread_local asCThreadLocalData *std_tld;
#endif
int asCThreadManager::CleanupLocalData() int asCThreadManager::CleanupLocalData()
{ {
if( threadManager == 0 ) if( threadManager == 0 )
@ -241,9 +237,7 @@ int asCThreadManager::CleanupLocalData()
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
#if !defined(_MSC_VER) || !(WINAPI_FAMILY & WINAPI_FAMILY_PHONE_APP) #if !defined(_MSC_VER) || !(WINAPI_FAMILY & WINAPI_FAMILY_PHONE_APP)
asCThreadLocalData *tld = (asCThreadLocalData*)TlsGetValue((DWORD)threadManager->tlsKey); asCThreadLocalData *tld = (asCThreadLocalData*)TlsGetValue((DWORD)threadManager->tlsKey);
#endif #endif
#elif defined(AS_STD_THREADS)
auto tld = std_tld;
#endif #endif
if( tld == 0 ) if( tld == 0 )
@ -305,13 +299,7 @@ asCThreadLocalData *asCThreadManager::GetLocalData()
tld = asNEW(asCThreadLocalData)(); tld = asNEW(asCThreadLocalData)();
TlsSetValue((DWORD)threadManager->tlsKey, tld); TlsSetValue((DWORD)threadManager->tlsKey, tld);
} }
#endif #endif
#elif defined(AS_STD_THREADS)
if(std_tld == nullptr)
{
std_tld = asNEW(asCThreadLocalData)();
}
auto tld = std_tld;
#endif #endif
return tld; return tld;
@ -367,8 +355,6 @@ void asCThreadCriticalSection::Enter()
pthread_mutex_lock(&cs); pthread_mutex_lock(&cs);
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
EnterCriticalSection(&cs); EnterCriticalSection(&cs);
#elif defined(AS_STD_THREADS)
_mutex.lock();
#endif #endif
} }
@ -378,8 +364,6 @@ void asCThreadCriticalSection::Leave()
pthread_mutex_unlock(&cs); pthread_mutex_unlock(&cs);
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
LeaveCriticalSection(&cs); LeaveCriticalSection(&cs);
#elif defined(AS_STD_THREADS)
_mutex.unlock();
#endif #endif
} }
@ -389,8 +373,6 @@ bool asCThreadCriticalSection::TryEnter()
return !pthread_mutex_trylock(&cs); return !pthread_mutex_trylock(&cs);
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
return TryEnterCriticalSection(&cs) ? true : false; return TryEnterCriticalSection(&cs) ? true : false;
#elif defined(AS_STD_THREADS)
return _mutex.try_lock();
#else #else
return true; return true;
#endif #endif
@ -445,8 +427,6 @@ void asCThreadReadWriteLock::AcquireExclusive()
// Allow another writer to lock. It will only be able to // Allow another writer to lock. It will only be able to
// lock the readers when this writer releases them anyway. // lock the readers when this writer releases them anyway.
LeaveCriticalSection(&writeLock); LeaveCriticalSection(&writeLock);
#elif defined(AS_STD_THREADS)
_mutex.lock();
#endif #endif
} }
@ -457,8 +437,6 @@ void asCThreadReadWriteLock::ReleaseExclusive()
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
// Release all readers at once // Release all readers at once
ReleaseSemaphore(readLocks, maxReaders, 0); ReleaseSemaphore(readLocks, maxReaders, 0);
#elif defined(AS_STD_THREADS)
_mutex.unlock();
#endif #endif
} }
@ -469,8 +447,6 @@ void asCThreadReadWriteLock::AcquireShared()
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
// Lock a reader slot // Lock a reader slot
WaitForSingleObjectEx(readLocks, INFINITE, FALSE); WaitForSingleObjectEx(readLocks, INFINITE, FALSE);
#elif defined(AS_STD_THREADS)
_mutex.lock_shared();
#endif #endif
} }
@ -481,8 +457,6 @@ void asCThreadReadWriteLock::ReleaseShared()
#elif defined AS_WINDOWS_THREADS #elif defined AS_WINDOWS_THREADS
// Release the reader slot // Release the reader slot
ReleaseSemaphore(readLocks, 1, 0); ReleaseSemaphore(readLocks, 1, 0);
#elif defined(AS_STD_THREADS)
_mutex.unlock_shared();
#endif #endif
} }