System::Threading::Mutex فئة

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

الطرق

طريقةالوصف
Mutex()معلومات RTTI.
Mutex(bool)منشئ.
Mutex(bool, const String&)منشئ.
ReleaseMutex()يطلق القفل.
static Remove(const String&)يمسح قفلًا مسمى من النظام.
virtual Reset()يعيد ضبط حالة القفل المتبادل. غير مُنفّذ.
virtual Set()يضبط القفل المتبادل إلى الحالة المُشار إليها. غير مُنفّذ.
WaitOne() overrideيقفل القفل المتبادل. يُجري انتظارًا غير محدود إذا لزم الأمر.
WaitOne(int) overrideيقفل القفل المتبادل. يُجري انتظارًا إذا لزم الأمر.
WaitOne(TimeSpan) overrideيقفل القفل المتبادل. يُجري انتظارًا إذا لزم الأمر.

الحقول

حقلالوصف
static WaitTimeoutقيمة خاصة تُرجَع من الدالة، وإلا تُرجَع فهرس الكائن المُشار إليه في المصفوفة إذا تجاوز المهلة ولم يحدث أي إشارة.

ملاحظات

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

انظر أيضًا