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

MethodeBeschrijving
Mutex()RTTI-informatie.
Mutex(bool)Constructor.
Mutex(bool, const String&)Constructor.
ReleaseMutex()Vrijgeeft de mutex.
static Remove(const String&)Verwijdert een benoemde mutex uit het systeem.
virtual Reset()Reset de mutexstatus. Niet geïmplementeerd.
virtual Set()Stel de mutex in op gesignaleerde status. Niet geïmplementeerd.
WaitOne() overrideVergrendelt mutex. Voert onbeperkt wachten uit indien nodig.
WaitOne(int) overrideVergrendelt mutex. Voert wachten uit indien nodig.
WaitOne(TimeSpan) overrideVergrendelt mutex. Voert wachten uit indien nodig.

Velden

VeldBeschrijving
static WaitTimeoutSpeciale waarde die door de functie moet worden geretourneerd, anders wordt de index van het gesignaleerde object in de array geretourneerd, als de timeout wordt overschreden en er niets signaleert.

Opmerkingen

#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.
*/

Zie ook