线程 ID 和线程句柄之间的区别
先决条件:操作系统中的线程
线程 ID是一个长正整数,在创建线程时创建。在线程的整个生命周期中,线程 ID 是唯一的并且保持不变。它可以在线程终止时重用。可以在这里研究 Thread get_id() 方法,在这里我们可以看到它是如何使用的。
线程句柄是一个令牌,它允许您对线程执行某些操作,通常等待或终止它。
CreateThread() API函数为进程创建一个新线程。它必须指定要执行的新线程的起始地址。 CreateThread() API 同时返回线程句柄和线程 ID。创建线程对象等操作由线程句柄控制。在系统级别,线程 ID 在特定线程运行时唯一标识该线程。
线程 ID 和线程句柄的区别:
- 线程由线程句柄操作。可能有多个线程,其中每个线程句柄可以有不同的操作目标。
- open thread 得到的值因进程不同而不同。
- 在windows系统范围内,thread id是thread的唯一标识。
- 线程句柄是进程本地的,而线程 ID 是系统范围的。
- 为了在 OS 和 Client 之间操作进程和线程,线程句柄充当了桥梁。操作系统有一个表格用于维护线程句柄。句柄包含句柄的引用计数和相关属性。
- 线程句柄是操作系统用来识别进程和线程的,用户可以通过句柄来识别进程和线程并对其进行操作。
- 操作系统使用线程 ID 来识别进程和线程。线程id全局唯一,但用户可以通过这个id获取进程线程的线程句柄。
- 线程句柄是内核对象,而线程 ID 不是。
- 对于创建线程 id,它会在使用 CreateThread 时由操作系统自动生成。
- 线程 id 和句柄是两个不同的东西。线程id在windows系统中是唯一对应的,即。如果有两个线程并且如果它们返回相同的线程 ID,则它们必须是相同的线程,否则它们必须源自不同的线程。
- 线程句柄是用于访问线程的 32 位值,它不是线程的唯一标识符。
- 同一个句柄必须标识同一个线程,但同一个线程可能有2个打开的句柄,所以它不能用线程句柄来区分两个线程是否相似(同一个线程)。