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

Yöntemler

YöntemAçıklama
Mutex()RTTI bilgisi.
Mutex(bool)Yapıcı.
Mutex(bool, const String&)Yapıcı.
ReleaseMutex()Mutex’i serbest bırakır.
static Remove(const String&)Sistemdeki adlandırılmış bir mutex’i siler.
virtual Reset()Mutex durumunu sıfırlar. Henüz uygulanmadı.
virtual Set()Mutex’i sinyal durumuna ayarlar. Henüz uygulanmadı.
WaitOne() overrideMutex’i kilitler. Gerekirse sınırsız bekleme yapar.
WaitOne(int) overrideMutex’i kilitler. Gerekirse bekleme yapar.
WaitOne(TimeSpan) overrideMutex’i kilitler. Gerekirse bekleme yapar.

Alanlar

AlanAçıklama
static WaitTimeoutFonksiyon tarafından döndürülecek özel değer, aksi takdirde zaman aşımı geçerse ve hiçbir şey sinyal göndermezse, dizideki sinyalleri olan nesnenin indeksini döndürür.

Açıklamalar

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

Ayrıca Bakınız