线程编程是一种允许程序并发执行多个任务的技术。在C++中,线程编程可以通过使用C++11标准库中的头文件来实现。线程编程的应用非常广泛,可以用于提高程序的性能和响应速度,同时处理多个用户请求,执行后台任务等。
下面是一个简单的C++线程编程的例子,演示如何在程序中创建和运行多个线程:
#include <IOStream>
#include <thread>
void print_numbers(int start, int end) {
for (int i = start; i <= end; i++) {
std::cout << i << " ";
}
std::cout << std::endl;
}
int mAIn() {
std::thread t1(print_numbers, 1, 10);
std::thread t2(print_numbers, 11, 20);
t1.join();
t2.join();
return 0;
}
在上面的例子中,我们定义了一个函数print_numbers,用于打印一组数字。然后我们在main函数中创建了两个线程t1和t2,分别调用print_numbers函数打印不同的数字范围。最后,我们通过调用t1.join()和t2.join()等待两个线程执行完毕,然后返回主线程。
注意点:
下面是一个使用互斥锁和条件变量实现线程同步的例子:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
int count = 0;
void increment() {
for (int i = 0; i < 100000; i++) {
std::unique_lock<std::mutex> lock(mtx);
count++;
cv.notify_all();
lock.unlock();
std::this_thread::yield(); // 让出CPU,等待其他线程执行
}
}
void wait_for_count() {
std::unique_lock<std::mutex> lock(mtx);
while (count < 100000) {
cv.wait(lock); // 等待条件满足(count >= 100000)或者收到通知(cv.notify_all())
}
std::cout << "count = " << count << std::endl;
}
int main() {
std::thread t1(increment);
std::thread t2(wait_for_count);
t1.join();
t2.join();
return 0;
}
在上面的例子中,我们定义了一个全局变量count和一个互斥锁mtx和一个条件变量cv。在increment函数中,我们使用互斥锁保护count变量,每次将count加1并通知所有等待的线程(cv.notify_all())。在wait_for_count函数中,我们使用互斥锁和条件变量等待count变量达到100000。最后,我们在main函数中创建了两个线程t1和t2分别执行increment和wait_for_count函数,然后等待两个线程执行完毕。