GNU/Linux >> Belajar Linux >  >> Linux

Thread ID vs Thread Handle

ID adalah pengidentifikasi numerik unik dari utas yang berjalan di sistem. Pegangan utas, seperti pegangan objek kernel apa pun, dapat dilihat sebagai tipe khusus penunjuk referensi yang dihitung ke objek kernel.

Jadi di ruang kernel ada objek bertipe THREAD dengan ID =12345

Dan karena Anda ingin melakukan sesuatu dengan utas, Anda memiliki penunjuk di ruang alamat Anda yang disebut threadID dengan nilai 44.

Perhatikan bahwa pegangan yang berbeda untuk objek kernel yang sama memiliki nilai yang berbeda (dua penunjuk ke satu objek) dan objek kernel dapat memiliki pegangan di lebih dari satu proses.


Pustaka pthread Linux, sejauh yang saya tahu, tidak memiliki konsep pegangan utas. pthread_create dan fungsi pthreads lainnya, kembalikan ID utas.

Pada Windows, pegangan utas berbeda dari ID utas, dengan cara yang sama seperti pegangan file berbeda dari nama file.

Pegangan utas adalah token yang memungkinkan Anda melakukan sesuatu dengan utas (biasanya menunggu atau mematikannya). Win32 memiliki token ini untuk banyak objek, dan menyebutnya HANDLE secara umum.

Token pada dasarnya adalah penunjuk pada utas yang sedang berjalan (atau berhenti) dan memiliki serangkaian kemampuan yang terkait dengannya, misalnya, Anda dapat memiliki pegangan yang memungkinkan Anda untuk menunggu, tetapi tidak mematikan, utas. Dengan cara yang sama, kita dapat memiliki pegangan file yang hanya bisa dibaca.

Tingkat tipuan ini mungkin berguna atau mungkin tidak, tetapi itulah cara Win32 melakukannya, dan secara luas konsisten dengan cara menangani beberapa jenis objek lainnya.


ID utas bersifat progresif (yaitu, satu demi satu), yang dapat Anda lewati. Pegangan utas, seperti kebanyakan pegangan di Windows, sebenarnya adalah penunjuk. Anda dapat, misalnya, mengatur bit properti utas dengan menggunakan pegangan utas - tetapi bukan id utas .


Linux
  1. Mengonfigurasi Apache untuk menangani WebSocks

  2. Cara Mengakhiri Thread dalam Program C ( Contoh pthread_exit )

  3. Bagaimana memberi nama utas di Linux?

  1. Apakah errno thread-safe?

  2. Apakah utas memiliki tumpukan yang berbeda?

  3. WaitForSingleObject dan WaitForMultipleObjects setara di Linux?

  1. Utas POSIX terpisah vs. Dapat digabungkan

  2. strtok fungsi pengaman benang

  3. Akses thread-local dari thread lain