System::Threading::Mutex Klasse

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 das Mutex in den signaliserten Zustand. Nicht implementiert.
WaitOne() overrideSperrt das Mutex. Führt bei Bedarf unbegrenztes Warten durch.
WaitOne(int) overrideSperrt das Mutex. Führt bei Bedarf Warten durch.
WaitOne(TimeSpan) overrideSperrt das Mutex. Führt bei Bedarf Warten durch.

Felder

FeldBeschreibung
static WaitTimeoutSpezialwert, der von der Funktion zurückgegeben wird, andernfalls wird der Index des signalisierten Objekts im Array zurückgegeben, wenn das Zeitlimit ü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