21xrx.com
2024-11-08 22:10:39 Friday
登录
文章检索 我的文章 写文章
C++线程的面试题及答案解析
2023-07-05 01:03:09 深夜i     --     --
C++线程 面试题 答案解析 多线程编程 线程同步机制

线程是计算机中的一种重要机制,它可以使多个任务在同一时间段内同时执行,从而提高计算机的效率。C++作为一种流行的编程语言,在面试中经常会涉及到与线程相关的问题。接下来,我们将为大家介绍C++线程的一些面试题及答案解析。

1、C++中如何创建线程?

答:在C++中,可以使用标准库头文件 中的std::thread类来创建线程。具体而言,可以使用以下代码来创建线程:

std::thread threadObj(function);

其中function是一个函数,表示线程要执行的任务。该代码将创建一个新线程,该线程将调用function函数进行执行。

2、如何让线程等待其它线程?

答:可以使用std::thread类中的join()方法,该方法可以使当前线程等待被调用线程的执行完成。具体而言,可以使用以下代码来等待线程的执行完成:

std::thread threadObj(function);

threadObj.join();

此代码将创建一个新线程并等待该线程的执行完成。在执行线程退出之前,主线程将一直等待。

3、如何实现线程之间的通信?

答:可以使用std::mutex和std::condition_variable类来实现线程之间的通信。std::mutex类可以用来实现对共享资源的互斥访问,而std::condition_variable类可以用来实现线程在共享资源上的条件等待。

具体而言,可以使用以下代码示例来实现线程之间的通信:

std::mutex mutexObj;

std::condition_variable conditionObj;

bool dataReady;

int data;

// 线程1:

std::thread thread1([&data, &mutexObj, &conditionObj, &dataReady]() {

  // 等待数据就绪

  std::unique_lock lockObj(mutexObj);

  conditionObj.wait(lockObj, [&dataReady]() return dataReady; );

  // 获取数据

  std::cout << "Thread 1 get data: " << data << std::endl;

});

// 线程2:

std::thread thread2([&data, &mutexObj, &conditionObj, &dataReady]() {

  // 设置数据

  data = 12345;

  // 通知数据就绪

  {

    std::lock_guard lockObj(mutexObj);

    dataReady = true;

  }

  conditionObj.notify_one();

});

thread1.join();

thread2.join();

此代码将创建两个线程,线程1将等待线程2通知数据就绪,并获取数据;线程2将设置数据并通知数据就绪。线程之间的操作实现了互相等待和通知的功能。

总结:

在C++中,线程的知识是面试中常见的问题。本文介绍了C++中如何创建线程、如何让线程等待其它线程和如何实现线程之间的通信。希望对大家在面试中有所帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复