Bagikan melalui


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 rantai tunggu untuk satu atau beberapa utas, buat sesi WCT dengan 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 menggunakan 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 melewati handel peristiwa melalui struktur ini dan, ketika panggilan balik dijalankan, peristiwa ini disinyalir dan utas pemantauan diberi tahu bahwa kueri telah selesai.

Untuk contoh traversal rantai tunggu, lihat Menggunakan WCT.

Lihat juga