فئة System::Threading::Monitor
محتويات
[
يخفي
]Monitor class
الفئة Monitor توفر آلية تُزامن الوصول إلى الكائنات.
class Monitor : public System::Object
الطرق
| طريقة | الوصف |
|---|---|
| static Enter(const SharedPtr<Object>&) | يحصل على قفل حصري على كائن محدد. |
| static Enter(const System::SharedPtr<Object>&, bool&) | يحصل على قفل حصري على الكائن المحدد، ويضبط قيمة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static Exit(const SharedPtr<Object>&) | يفرج القفل الحصري عن الكائن المحدد. |
| static IsEntered(const System::SharedPtr<Object>&) | يحدد ما إذا كان الخيط الحالي يحمل القفل على الكائن المحدد. |
| static Pulse(const SharedPtr<Object>&) | يُخطر خيطًا في قائمة الانتظار بتغيير في حالة الكائن المقفل غير مُنفّذ. |
| static PulseAll(const SharedPtr<Object>&) | يُخطر جميع الخيوط المنتظرة بتغيير في حالة الكائن غير مُنفّذ. |
| static TryEnter(const SharedPtr<Object>&) | يحاول الحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static TryEnter(const System::SharedPtr<Object>&, bool&) | يحاول الحصول على قفل حصري على الكائن المحدد، ويضبط قيمة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static TryEnter(const SharedPtr<Object>&, int32_t) | يحاول، للعدد المحدد من المللي ثانية، الحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static TryEnter(const SharedPtr<Object>&, TimeSpan) | يحاول، للمدة المحددة، الحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static TryEnter(const System::SharedPtr<Object>&, int32_t, bool&) | يحاول، للمدة المحددة، الحصول على قفل حصري على الكائن المحدد، ويضبط قيمة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static TryEnter(const System::SharedPtr<Object>&, TimeSpan, bool&) | يحاول، للمدة المحددة، الحصول على قفل حصري على الكائن المحدد، ويضبط قيمة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static Wait(const SharedPtr<Object>&, int32_t, bool) | يفرج القفل عن كائن ويُحجب الخيط الحالي حتى يستعيد القفل. إذا انقضت فترة المهلة المحددة، يدخل الخيط إلى طابور الجاهزية. يمكن اختياريًا الخروج من نطاق المزامنة للسياق المتزامن قبل الانتظار وإعادة اكتساب النطاق بعد ذلك. غير مُنفّذ. |
| static Wait(const SharedPtr<Object>&, TimeSpan, bool) | يفرج القفل عن كائن ويُحجب الخيط الحالي حتى يستعيد القفل. إذا انقضت فترة المهلة المحددة، يدخل الخيط إلى طابور الجاهزية. يمكن اختياريًا الخروج من نطاق المزامنة للسياق المتزامن قبل الانتظار وإعادة اكتساب النطاق بعد ذلك. غير مُنفّذ. |
| static Wait(const SharedPtr<Object>&, int32_t) | يفرج القفل عن كائن ويُحجب الخيط الحالي حتى يستعيد القفل. إذا انقضت فترة المهلة المحددة، يدخل الخيط إلى طابور الجاهزية. غير مُنفّذ. |
| static Wait(const SharedPtr<Object>&, TimeSpan) | يفرج القفل عن كائن ويُحجب الخيط الحالي حتى يستعيد القفل. إذا انقضت فترة المهلة المحددة، يدخل الخيط إلى طابور الجاهزية. غير مُنفّذ. |
| static Wait(const SharedPtr<Object>&) | يفرج القفل عن كائن ويُحجب الخيط الحالي حتى يستعيد القفل غير مُنفّذ. |
ملاحظات
#include "system/threading/monitor.h"
#include "system/threading/thread.h"
#include "system/smart_ptr.h"
#include "system/string.h"
#include <iostream>
#include <vector>
int main()
{
using namespace System::Threading;
const auto threadsCount = 3;
std::cout << "Threads count: " << threadsCount << std::endl;
auto locker = System::MakeObject<System::Object>();
int x = 0;
std::vector<System::SharedPtr<Thread>> threads;
threads.reserve(threadsCount);
for (auto i = 0; i < threadsCount; ++i)
{
threads.emplace_back(System::MakeObject<Thread>([&x, &locker]() -> void {
Monitor::Enter(locker);
x = 1;
for (auto i = 0; i < 5; ++i)
{
std::cout << Thread::get_CurrentThread()->get_Name() << ": " << x++ << std::endl;
Thread::Sleep(100);
}
Monitor::Exit(locker);
}));
threads.back()->set_Name(System::String("Thread " + std::to_string(i)));
threads.back()->Start();
}
Thread::Sleep(threadsCount * 100);
for (auto& thread : threads)
{
thread->Join();
}
return 0;
}
/*
This code example produces the following output:
Threads count: 3
Thread 0: 1
Thread 0: 2
Thread 0: 3
Thread 0: 4
Thread 0: 5
Thread 1: 1
Thread 1: 2
Thread 1: 3
Thread 1: 4
Thread 1: 5
Thread 2: 1
Thread 2: 2
Thread 2: 3
Thread 2: 4
Thread 2: 5
*/
انظر أيضًا
- Class Object
- Namespace System::Threading
- Library Aspose.Font for C++