join()
方法与不使用join()
std::thread
类构造函数创建线程并使用pthread
时调用哪些低级函数。我已经阅读了互联网上的资料,但我仍在问这个问题只是为了进一步加强我的想法。 提前致谢
答案 0 :(得分:2)
1)线程允许并行执行程序。在程序中使用多个线程允许多个处理器内核执行代码,从而(通常)加速程序。
2)因为线程允许代码的parellel执行,所以线程#1正在读取数据而线程#2正在修改这些数据,这可能会导致一些你不想发生的时髦情况。互斥体通过让线程在这些特定的关键部分轮流等待来阻止这种行为。
3)使用thread.join()
使当前线程等待thread
对象的完成,该对象被称为join()
。
4)这确实是特定于操作系统的。例如,基于Unix的系统在创建pthread
时使用std::thread
作为底层线程类。编译器供应商实现了这一点。
答案 1 :(得分:0)
如果您想学习使用C ++标准库的多线程,请参阅C ++ concurrency IN Action(作者Williams)。这是一本非常好的书,也在The Definitive C++ Book Guide and List
上提到
- 什么是线程
醇>
线程是一个执行单元,它由自己的程序计数器,堆栈和一组寄存器组成。线程在应用程序中实现,以提高CPU的性能和有效使用 CPU在线程之间来回快速切换,给出了线程并行运行的错觉。 请参阅https://en.wikipedia.org/wiki/Thread_%28computing%29
- 使用互斥锁且不使用互斥锁的情况之间的区别
醇>
想象一下你和朋友分享公寓。有 只有一个厨房,只有一个浴室。除非你特别友好,否则你不能同时使用卫生间,如果你的室友长时间占用卫生间,如果你需要使用它可能会令人沮丧。 同样地,虽然可以同时做饭,但如果你有一个烤箱和烤架组合,如果你们中的一个人试图同时烧烤一些香肠而另一个人正在烘烤,那么它就不会结束。一块蛋糕。此外,我们都知道共享一个空间并在完成一项任务的过程中感到沮丧,却发现有人借用了我们需要的东西或者改变了我们离开它的方式。
线程也一样。如果您在线程之间共享数据,则需要有哪些线程可以访问哪些数据的规则,以及更新的方式
当您拥有多线程应用程序时,不同的线程有时会共享一个公共资源,例如全局变量,文件处理程序或任何。 互斥可以与单个资源一起用于同步。其他同步方法(如信号量)可用于在多个线程和进程之间进行同步。
这个概念被称为"互斥" (短Mutex),是一种确保在关键区域内只允许一个线程使用该资源等的方法。
- 使用join()方法和不使用join()
之间的区别 醇>
调用线程等待线程指定的线程终止。如果该线程已经终止,则join()立即返回。线程指定的线程必须是可连接的。 默认情况下,如果您未更改其属性,则线程可以加入。
- 使用std :: thread类构造函数创建线程并使用pthread时调用哪些低级函数。
醇>
在linux的情况下调用pthread_create。 std线程库与平台无关。因此它调用特定于底层操作系统的不同线程API。