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

Metodi

MetodoDescrizione
Mutex()Informazioni RTTI.
Mutex(bool)Costruttore.
Mutex(bool, const String&)Costruttore.
ReleaseMutex()Rilascia il mutex.
static Remove(const String&)Cancella un mutex nominato dal sistema.
virtual Reset()Reimposta lo stato del mutex. Non implementato.
virtual Set()Imposta il mutex nello stato segnalato. Non implementato.
WaitOne() overrideBlocca il mutex. Esegue attesa illimitata se necessario.
WaitOne(int) overrideBlocca il mutex. Esegue attesa se necessario.
WaitOne(TimeSpan) overrideBlocca il mutex. Esegue attesa se necessario.

Campi

CampoDescrizione
static WaitTimeoutValore speciale da restituire dalla funzione, altrimenti restituisce l’indice dell’oggetto segnalato nell’array, se il timeout scade e nulla segnala.

Osservazioni

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

Vedi anche