线程基本......帮助必需

时间:2015-12-26 14:03:28

标签: c++ multithreading join std mutex

  1. 什么是线程
  2. 使用互斥锁且不使用互斥锁的情况之间的区别
  3. 使用join()方法与不使用join()
  4. 之间的区别
  5. 使用std::thread类构造函数创建线程并使用pthread时调用哪些低级函数。
  6. 我已经阅读了互联网上的资料,但我仍在问这个问题只是为了进一步加强我的想法。 提前致谢

2 个答案:

答案 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

上提到
  
      
  1. 什么是线程
  2.   

线程是一个执行单元,它由自己的程序计数器,堆栈和一组寄存器组成。线程在应用程序中实现,以提高CPU的性能和有效使用 CPU在线程之间来回快速切换,给出了线程并行运行的错觉。 请参阅https://en.wikipedia.org/wiki/Thread_%28computing%29

  
      
  1. 使用互斥锁且不使用互斥锁的情况之间的区别
  2.   

想象一下你和朋友分享公寓。有 只有一个厨房,只有一个浴室。除非你特别友好,否则你不能同时使用卫生间,如果你的室友长时间占用卫生间,如果你需要使用它可能会令人沮丧。 同样地,虽然可以同时做饭,但如果你有一个烤箱和烤架组合,如果你们中的一个人试图同时烧烤一些香肠而另一个人正在烘烤,那么它就不会结束。一块蛋糕。此外,我们都知道共享一个空间并在完成一项任务的过程中感到沮丧,却发现有人借用了我们需要的东西或者改变了我们离开它的方式。

线程也一样。如果您在线程之间共享数据,则需要有哪些线程可以访问哪些数据的规则,以及更新的方式

当您拥有多线程应用程序时,不同的线程有时会共享一个公共资源,例如全局变量,文件处理程序或任何。 互斥可以与单个资源一起用于同步。其他同步方法(如信号量)可用于在多个线程和进程之间进行同步。

这个概念被称为"互斥" (短Mutex),是一种确保在关键区域内只允许一个线程使用该资源等的方法。

  
      
  1. 使用join()方法和不使用join()
  2. 之间的区别   

调用线程等待线程指定的线程终止。如果该线程已经终止,则join()立即返回。线程指定的线程必须是可连接的。 默认情况下,如果您未更改其属性,则线程可以加入。

  
      
  1. 使用std :: thread类构造函数创建线程并使用pthread时调用哪些低级函数。
  2.   

在linux的情况下调用pthread_create。 std线程库与平台无关。因此它调用特定于底层操作系统的不同线程API。

相关问题