HomeBlogMagic

Define CRITICAL_SECTION for Linux

Wer schon mal ein Tool von Windows nach Linux konvertiert hat, wird auch schon mal über das Problem der critical sections gestolpert sein.

Wenn nicht viel Zeit dazu verwendet werden soll die Mutexe auf eine Platormübergreifende Version umzustellen kann sich mit ein paar wenigen Hilfsmitteln eine kompatible Schicht für Linux erstellen

#define CRITICAL_SECTION          pthread_mutex_t
#define EnterCriticalSection      pthread_mutex_lock
#define LeaveCriticalSection      pthread_mutex_unlock
#define InitializeCriticalSection(object) pthread_mutex_init(object, nullptr)
#define DeleteCriticalSection     pthread_mutex_destroy

Durch diese wenigen defines können die pthread mutexe auf selbe weise wie unter Windows genutzt werden. Beispiel:

#ifndef WIN32
  #define CRITICAL_SECTION          pthread_mutex_t
  #define EnterCriticalSection      pthread_mutex_lock
  #define LeaveCriticalSection      pthread_mutex_unlock
  #define InitializeCriticalSection(object) pthread_mutex_init(object, nullptr)
  #define DeleteCriticalSection     pthread_mutex_destroy
#endif

void CriticalSectionExample(void)
{
  static CRITICAL_SECTION  oCriticalSection;
  InitializeCriticalSection(&oCriticalSection);
  EnterCriticalSection(&oCriticalSection);
  LeaveCriticalSection(&oCriticalSection);
  DeleteCriticalSection(&oCriticalSection);
}
Permalink: https://adirmeier.de/Blog/ID_427
Tags: Blog, C/C++, Linux, Windowsvon am 2022-09-19