System::Threading::Mutex class

Mutex class

Mutex implemnetation. Objects of this class should only be allocated using System::MakeObject() function. Never create instance of this type on stack or using operator new, as it will result in runtime errors and/or assertion faults. Always wrap this class into System::SmartPtr pointer and use this pointer to pass it to functions as argument.

class Mutex : public System::Threading::WaitHandle

Methoden

MethodeBeschreibung
Mutex()RTTI-Informationen.
Mutex(bool)Konstruktor.
Mutex(bool, const String&)Konstruktor.
ReleaseMutex()Gibt das Mutex frei.
static Remove(const String&)Löscht ein benanntes Mutex aus dem System.
virtual Reset()Setzt den Mutex-Zustand zurück. Nicht implementiert.
virtual Set()Setzt den Mutex in den signalierten Zustand. Nicht implementiert.
WaitOne() overrideSperrt den Mutex. Führt bei Bedarf unbegrenztes Warten aus.
WaitOne(int) overrideSperrt den Mutex. Führt bei Bedarf Warten aus.
WaitOne(TimeSpan) overrideSperrt den Mutex. Führt bei Bedarf Warten aus.

Felder

FeldBeschreibung
static WaitTimeoutSpezieller Wert, der von der Funktion zurückgegeben wird, andernfalls wird der Index des signalisierten Objekts im Array zurückgegeben, wenn das Timeout überschritten wird und nichts signalisiert.

Hinweise

#include "system/threading/mutex.h"
#include "system/threading/thread.h"
#include "system/console.h"
#include "system/convert.h"
#include "system/smart_ptr.h"
#include "system/string.h"

int main()
{
  auto mutex = System::MakeObject<System::Threading::Mutex>();

  System::String str;

  const int THREADS_COUNT = 3;
  std::vector<System::SharedPtr<System::Threading::Thread>> threads;
  threads.reserve(THREADS_COUNT);

  for (auto i = 0; i < THREADS_COUNT; ++i)
  {
    threads.push_back(System::MakeObject<System::Threading::Thread>([&mutex, &str]()
    {
      mutex->WaitOne();

      str += u"Thread " + System::Convert::ToString(System::Threading::Thread::GetCurrentThreadId()) + u" started." + System::Environment::get_NewLine();

      System::Threading::Thread::Sleep(200);

      str += u"Thread " + System::Convert::ToString(System::Threading::Thread::GetCurrentThreadId()) + u" ended." + System::Environment::get_NewLine();

      mutex->ReleaseMutex();
    }));

    threads[i]->Start();
  }

  System::Threading::Thread::Sleep(700);

  System::Console::WriteLine(str);

  return 0;
}
/*
This code example produces the following output:
Thread 1 started.
Thread 1 ended.
Thread 2 started.
Thread 2 ended.
Thread 3 started.
Thread 3 ended.
*/

Siehe auch