Bagikan melalui


Multithreading: Kapan Menggunakan Kelas Sinkronisasi MFC

Kelas multithreaded yang disediakan dengan MFC termasuk dalam dua kategori: objek sinkronisasi (CSyncObject, CSemaphore, CMutex, CCriticalSection, dan CEvent) dan objek akses sinkronisasi (CMultiLock dan CSingleLock).

Kelas sinkronisasi digunakan saat akses ke sumber daya harus dikontrol untuk memastikan integritas sumber daya. Kelas akses sinkronisasi digunakan untuk mendapatkan akses ke sumber daya yang dikontrol ini. Topik ini menjelaskan kapan harus menggunakan setiap kelas.

Untuk menentukan kelas sinkronisasi mana yang harus Anda gunakan, ajukan serangkaian pertanyaan berikut:

  1. Apakah aplikasi harus menunggu sesuatu terjadi sebelum dapat mengakses sumber daya (misalnya, data harus diterima dari port komunikasi sebelum dapat ditulis ke file)?

    Jika ya, gunakan CEvent.

  2. Dapatkah lebih dari satu utas dalam aplikasi yang sama mengakses sumber daya ini pada satu waktu (misalnya, aplikasi Anda memungkinkan hingga lima jendela dengan tampilan pada dokumen yang sama)?

    Jika ya, gunakan CSemaphore.

  3. Dapatkah lebih dari satu aplikasi menggunakan sumber daya ini (misalnya, sumber daya berada dalam DLL)?

    Jika ya, gunakan CMutex.

    Jika tidak, gunakan CCriticalSection.

CSyncObject tidak pernah digunakan secara langsung. Ini adalah kelas dasar untuk empat kelas sinkronisasi lainnya.

Contoh 1: Menggunakan Tiga Kelas Sinkronisasi

Sebagai contoh, ambil aplikasi yang mempertahankan daftar akun yang ditautkan. Aplikasi ini memungkinkan hingga tiga akun untuk diperiksa di jendela terpisah, tetapi hanya satu yang dapat diperbarui pada waktu tertentu. Saat akun diperbarui, data yang diperbarui dikirim melalui jaringan ke arsip data.

Contoh aplikasi ini menggunakan ketiga jenis kelas sinkronisasi. Karena memungkinkan hingga tiga akun diperiksa pada satu waktu, akun tersebut menggunakan CSemaphore untuk membatasi akses ke tiga objek tampilan. Ketika upaya untuk melihat akun keempat terjadi, aplikasi menunggu hingga salah satu dari tiga jendela pertama ditutup atau gagal. Ketika akun diperbarui, aplikasi menggunakan CCriticalSection untuk memastikan bahwa hanya satu akun yang diperbarui pada satu waktu. Setelah pembaruan berhasil, ia memberi sinyal CEvent, yang merilis utas yang menunggu peristiwa disinyalir. Utas ini mengirimkan data baru ke arsip data.

Contoh 2: Menggunakan Kelas Akses Sinkronisasi

Memilih kelas akses sinkronisasi mana yang akan digunakan bahkan lebih sederhana. Jika aplikasi Anda khawatir dengan mengakses satu sumber daya terkontrol saja, gunakan CSingleLock. Jika memerlukan akses ke salah satu dari sejumlah sumber daya terkontrol, gunakan CMultiLock. Dalam contoh 1, CSingleLock akan digunakan, karena dalam setiap kasus hanya satu sumber daya yang diperlukan pada waktu tertentu.

Untuk informasi tentang bagaimana kelas sinkronisasi digunakan, lihat Multithreading: Cara Menggunakan Kelas Sinkronisasi. Untuk informasi tentang sinkronisasi, lihat Sinkronisasi di Windows SDK. Untuk informasi tentang dukungan multithreading di MFC, lihat Multithreading dengan C++ dan MFC.

Lihat juga

Multithreading dengan C++ dan MFC