![]() |
1
7
密钥在所有线程之间共享,因为它是用
我使用它们的一个方面是使标准C库线程安全。这个
这意味着库的用户不必担心线程之间的串扰——他们仍然需要确保一个线程在最后一个线程完成之前不会调用函数,但这与单线程代码相同。 它允许我们为系统中运行的每个线程提供一个“合适的”C环境,而不受其他供应商强加给其用户的通常“您必须调用这些特殊的非标准重入例程”的限制。
至于实现,根据我对DCE用户模式线程(我认为是当前pthreads的前身)的记忆,每个线程都有一个单一的结构,存储指令指针、堆栈指针、寄存器内容等内容。这是一个非常简单的事情,添加一个指向此结构的指针,以最小的成本实现非常强大的功能。指针指向键/指针对的数组(在某些实现中是链表),因此每个线程可以有多个键(例如,一个用于
|
![]() |
2
1
只要结果是一样的,实现实际上并不重要(每个操作系统可能会有所不同)。 您可以将其视为两级hashmap。该键指定要访问的线程本地“变量”,第二级可以执行线程id查找以请求每个线程的值。 |
![]() |
Namit Patel · 如何将数组作为返回值传递给线程? 6 年前 |
![]() |
Davi Wesley · 对线程使用参数 6 年前 |
![]() |
Jay Wang · 生产者/消费者实施:陷入消费者循环 6 年前 |
![]() |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 6 年前 |
![]() |
MohammadReza Vahedi · 返回响应后运行函数 7 年前 |
![]() |
AshR · 程序断断续续地使用main报告与线程本身不同的线程id 7 年前 |
![]() |
filo · 如何在x86上使用gcc强制执行内存排序 7 年前 |