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()Απελευθερώνει το mutex.
static Remove(const String&)Διαγράφει ένα ονομαστικό mutex από το σύστημα.
virtual Reset()Επαναφέρει την κατάσταση του mutex. Δεν έχει υλοποιηθεί.
virtual Set()Ορίζει το mutex σε κατάσταση σήματος. Δεν έχει υλοποιηθεί.
WaitOne() overrideΚλειδώνει το mutex. Εκτελεί απεριόριστη αναμονή εάν είναι απαραίτητο.
WaitOne(int) overrideΚλειδώνει το mutex. Εκτελεί αναμονή εάν είναι απαραίτητο.
WaitOne(TimeSpan) overrideΚλειδώνει το mutex. Εκτελεί αναμονή εάν είναι απαραίτητο.

Πεδία

ΠεδίοΠεριγραφή
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.
*/

Δείτε επίσης