多执行几次代码(也可以增大for循环的次数),每一次for循环执行完之后存在的线程数量不一定相同。
参考 stdthread_local 库的文档说明:
Note that since thread IDs are recycled when a thread exits, it is possible for one thread to retrieve the object of another thread. Since this can only occur after a thread has exited this does not lead to any race conditions.
在原先的官方示例代码中,
for
循环里的join()
方法都会等待子线程执行完毕,当前循环执行完,子线程都会退出,并且在下一次循环时,生成的子线程会回收退出线程的对象。所以for
循环执行完之后,只剩下一个子线程。官方示例代码不能很好地体现出求和多个子线程局部变量中的计数器值,事实上只有一个子线程。证明
当前循环执行完,线程都会退出,并且在下一次循环时,生成的子线程会回收退出线程的对象
?for循环执行完之后,只剩下一个子线程
?fn main() {
}
优化官方示例代码
让多个子线程存在,收集它们的线程局部变量中的计数器值
执行以上代码并输出
多执行几次代码(也可以增大for循环的次数),每一次for循环执行完之后存在的线程数量不一定相同。 参考 std thread_local 库的文档说明:
Note that since thread IDs are recycled when a thread exits, it is possible for one thread to retrieve the object of another thread. Since this can only occur after a thread has exited this does not lead to any race conditions.
故作此优化。