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

Metoder

MetodBeskrivning
Mutex()RTTI-information.
Mutex(bool)Konstruktor.
Mutex(bool, const String&)Konstruktor.
ReleaseMutex()Frigör mutexen.
static Remove(const String&)Raderar en namngiven mutex från systemet.
virtual Reset()Återställer mutexens tillstånd. Ej implementerat.
virtual Set()Sätt mutex till signalerat tillstånd. Ej implementerat.
WaitOne() overrideLåser mutex. Utför obegränsad väntan om nödvändigt.
WaitOne(int) overrideLåser mutex. Utför väntan om nödvändigt.
WaitOne(TimeSpan) overrideLåser mutex. Utför väntan om nödvändigt.

Fält

FältBeskrivning
static WaitTimeoutSpeciellt värde som ska returneras av funktionen, annars returneras index för signaliserat objekt i arrayen om tidsgränsen överskrids och inget signalerar.

Anmärkningar

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

Se även