System::Threading::Monitor class
isi
[
bersembunyi
]Monitor class
Kelas Monitor menyediakan mekanisme yang menyinkronkan akses ke objek.
class Monitor : public System::Object
Metode
| Metode | Deskripsi |
|---|---|
| static Enter(const SharedPtr<Object>&) | Mendapatkan kunci eksklusif pada objek yang ditentukan. |
| static Enter(const System::SharedPtr<Object>&, bool&) | Mendapatkan kunci eksklusif pada objek yang ditentukan, dan secara atomik mengatur nilai yang menunjukkan apakah kunci telah diambil. |
| static Exit(const SharedPtr<Object>&) | Melepaskan kunci eksklusif pada objek yang ditentukan. |
| static IsEntered(const System::SharedPtr<Object>&) | Menentukan apakah thread saat ini memegang kunci pada objek yang ditentukan. |
| static Pulse(const SharedPtr<Object>&) | Memberitahu sebuah thread dalam antrian tunggu tentang perubahan status objek yang dikunci. Tidak diimplementasikan. |
| static PulseAll(const SharedPtr<Object>&) | Memberitahu semua thread yang menunggu tentang perubahan status objek. Tidak diimplementasikan. |
| static TryEnter(const SharedPtr<Object>&) | Mencoba mendapatkan kunci eksklusif pada objek yang ditentukan. Tidak diimplementasikan. |
| static TryEnter(const System::SharedPtr<Object>&, bool&) | Mencoba mendapatkan kunci eksklusif pada objek yang ditentukan, dan secara atomik mengatur nilai yang menunjukkan apakah kunci telah diambil. |
| static TryEnter(const SharedPtr<Object>&, int32_t) | Mencoba, selama jumlah milidetik yang ditentukan, mendapatkan kunci eksklusif pada objek yang ditentukan. Tidak diimplementasikan. |
| static TryEnter(const SharedPtr<Object>&, TimeSpan) | Mencoba, selama durasi waktu yang ditentukan, mendapatkan kunci eksklusif pada objek yang ditentukan. Tidak diimplementasikan. |
| static TryEnter(const System::SharedPtr<Object>&, int32_t, bool&) | Mencoba, selama jangka waktu yang ditentukan, untuk memperoleh kunci eksklusif pada objek yang ditentukan, dan secara atomik menetapkan nilai yang menunjukkan apakah kunci tersebut diambil. |
| static TryEnter(const System::SharedPtr<Object>&, TimeSpan, bool&) | Mencoba, selama jangka waktu yang ditentukan, untuk memperoleh kunci eksklusif pada objek yang ditentukan, dan secara atomik menetapkan nilai yang menunjukkan apakah kunci tersebut diambil. |
| static Wait(const SharedPtr<Object>&, int32_t, bool) | Melepaskan kunci pada sebuah objek dan memblokir thread saat ini hingga ia memperoleh kembali kunci tersebut. Jika interval batas waktu yang ditentukan berakhir, thread masuk ke antrian siap. Secara opsional keluar dari domain sinkronisasi untuk konteks yang disinkronkan sebelum menunggu dan memperoleh kembali domain tersebut setelahnya. Tidak diimplementasikan. |
| static Wait(const SharedPtr<Object>&, TimeSpan, bool) | Melepaskan kunci pada sebuah objek dan memblokir thread saat ini hingga ia memperoleh kembali kunci tersebut. Jika interval batas waktu yang ditentukan berakhir, thread masuk ke antrian siap. Secara opsional keluar dari domain sinkronisasi untuk konteks yang disinkronkan sebelum menunggu dan memperoleh kembali domain tersebut setelahnya. Tidak diimplementasikan. |
| static Wait(const SharedPtr<Object>&, int32_t) | Melepaskan kunci pada sebuah objek dan memblokir thread saat ini hingga ia memperoleh kembali kunci tersebut. Jika interval batas waktu yang ditentukan berakhir, thread masuk ke antrian siap. Tidak diimplementasikan. |
| static Wait(const SharedPtr<Object>&, TimeSpan) | Melepaskan kunci pada sebuah objek dan memblokir thread saat ini hingga ia memperoleh kembali kunci tersebut. Jika interval batas waktu yang ditentukan berakhir, thread masuk ke antrian siap. Tidak diimplementasikan. |
| static Wait(const SharedPtr<Object>&) | Melepaskan kunci pada sebuah objek dan memblokir thread saat ini hingga ia memperoleh kembali kunci tersebut. Tidak diimplementasikan. |
Catatan
#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
*/
Lihat Juga
- Class Object
- Namespace System::Threading
- Library Aspose.Page for C++