📅  最后修改于: 2023-12-03 15:23:43.460000             🧑  作者: Mango
多线程是指程序中包含多个执行流,每个执行流都可以并行执行不同的任务,从而提高程序的处理能力。在 C++ 中,可以使用多线程库来实现多线程编程。
C++ 提供了多线程库 thread
,该库允许开发者创建和管理多个线程。以下是一些常用操作:
使用 std::thread
类可以创建一个新线程。以下是一个示例代码:
#include <iostream>
#include <thread>
// 线程函数
void thread_function()
{
std::cout << "Hello World!" << std::endl;
}
// 主函数
int main()
{
// 创建一个新线程
std::thread threadObj(thread_function);
// 等待线程结束
threadObj.join();
return 0;
}
以上代码创建了一个新线程,并调用 thread_function
函数执行其中的任务。
可以通过创建函数对象,并向其传递参数来传递参数给新线程。以下是一个示例代码:
#include <iostream>
#include <thread>
// 线程函数
void thread_function(int n)
{
std::cout << n << std::endl;
}
// 主函数
int main()
{
// 创建一个新线程
std::thread threadObj(thread_function, 5);
// 等待线程结束
threadObj.join();
return 0;
}
以上代码创建了一个新线程,并传递了整数 5 给 thread_function
函数。
可以使用 join
函数来等待线程结束。以下是一个示例代码:
#include <iostream>
#include <thread>
// 线程函数
void thread_function()
{
std::cout << "Hello World!" << std::endl;
}
// 主函数
int main()
{
// 创建一个新线程
std::thread threadObj(thread_function);
// 等待线程结束
threadObj.join();
std::cout << "Thread joined" << std::endl;
return 0;
}
以上代码创建了一个新线程,并等待其结束后输出 Thread joined
。
多线程编程需要注意线程安全问题。在多个线程之间读写共享数据可能会导致数据不一致或者程序错误。以下是一些常用的多线程安全技术:
互斥锁是一种用于多线程编程保护共享数据的同步机制。以下是一个示例代码:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
// 线程函数
void thread_function()
{
mtx.lock();
std::cout << "Hello World!" << std::endl;
mtx.unlock();
}
// 主函数
int main()
{
// 创建多个新线程
std::thread threadObj1(thread_function);
std::thread threadObj2(thread_function);
std::thread threadObj3(thread_function);
// 等待所有线程结束
threadObj1.join();
threadObj2.join();
threadObj3.join();
std::cout << "All threads joined" << std::endl;
return 0;
}
以上代码创建了多个新线程,并使用 std::mutex
保护共享资源的输出,确保执行顺序不会交错。
条件变量是一种用于多线程编程的同步机制,允许线程挂起等待某个条件成立,直到其他线程通知该条件成立才唤醒线程。以下是一个示例代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool isReady = false;
// 线程函数
void thread_function()
{
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{return isReady;});
std::cout << "Hello World!" << std::endl;
}
// 主函数
int main()
{
// 创建一个新线程
std::thread threadObj(thread_function);
// 等待一段时间
std::this_thread::sleep_for(std::chrono::seconds(5));
{
std::lock_guard<std::mutex> lck(mtx);
isReady = true;
}
cv.notify_one();
// 等待线程结束
threadObj.join();
std::cout << "Thread joined" << std::endl;
return 0;
}
以上代码创建了一个新线程,并使用条件变量等待指定条件成立再执行任务。
多线程编程是一项复杂的任务,需要注意线程安全问题。C++ 中的多线程库提供了丰富的功能,方便开发者创建和管理多个线程,更好地利用多核处理器的能力,加速程序的处理速度。