Traversal rantai tunggu

Wait chain traversal (WCT) memungkinkan debugger untuk mendiagnosis aplikasi macet dan kebuntuan.

Rantai tunggu adalah urutan utas dan objek sinkronisasi alternatif di mana setiap utas menunggu objek yang mengikuti. Setiap objek yang mengikuti adalah, pada gilirannya, dimiliki oleh utas berikutnya dalam rantai.

Utas menunggu objek sinkronisasi sejak utas meminta objek hingga diperoleh. Kunci ini dimiliki oleh utas sejak utas memperolehnya sampai utas melepaskannya. Dengan kata lain, ketika utas 1 menunggu kunci yang dimiliki oleh utas 2, utas 1 menunggu utas 2.

WCT mendukung primitif sinkronisasi berikut:

Untuk mengambil kembali rantai tunggu untuk satu atau beberapa utas, buat sesi WCT menggunakan fungsi OpenThreadWaitChainSession dan GetThreadWaitChain. Sesi WCT diwakili oleh handel jenis HWCT.

Sesi bisa sinkron atau asinkron

Anda tidak dapat membatalkan sesi sinkron, dan memblokir utas panggilan, hingga rantai tunggu diambil.

Sesi asinkron tidak memblokir utas panggilan, dan dapat dibatalkan oleh aplikasi dengan fungsi CloseThreadWaitChainSession . Hasil dari operasi asinkron disediakan melalui fungsi panggilan balik WaitChainCallback yang disediakan oleh aplikasi.

Untuk sesi asinkron, pemanggil dapat menentukan penunjuk ke struktur data konteks melalui GetThreadWaitChain. Pointer yang sama ini diteruskan ke fungsi panggilan balik WaitChainCallback .

Struktur data konteks ditentukan pengguna dan buram ke WCT. Struktur data konteks dapat digunakan oleh aplikasi untuk mengkomunikasikan konteks antara kueri WCT dan fungsi panggilan balik. Biasanya, Anda meneruskan handle acara melalui struktur ini dan, ketika panggilan balik dijalankan, sinyal acara dikirim dan utas pemantauan akan diberitahu bahwa kueri telah selesai.

Untuk contoh traversal rantai tunggu, lihat Menggunakan WCT.

Lihat juga