一个多线程的简单C++示例程序
时间: 2023-08-01 15:09:34 浏览: 52
以下是一个简单的多线程C++示例程序,其中包含两个线程,一个线程用于输出奇数,另一个用于输出偶数:
```c++
#include <iostream>
#include <thread>
void printOdd() {
for (int i = 1; i <= 10; i += 2) {
std::cout << "Odd: " << i << std::endl;
}
}
void printEven() {
for (int i = 2; i <= 10; i += 2) {
std::cout << "Even: " << i << std::endl;
}
}
int main() {
std::thread t1(printOdd);
std::thread t2(printEven);
t1.join();
t2.join();
return 0;
}
```
在这个示例程序中,我们定义了两个函数 `printOdd` 和 `printEven`,分别用于输出奇数和偶数。在 `main` 函数中,我们创建了两个线程 `t1` 和 `t2`,分别用于执行这两个函数。最后,我们调用 `join` 方法等待这两个线程执行完毕,然后返回0结束程序。
需要注意的是,多线程编程需要仔细处理线程间的同步和互斥,以避免出现竞态条件等问题。
相关问题
用c++智能指针编一个多线程程序
下面是一个使用C++智能指针编写的多线程程序示例:
```c++
#include <iostream>
#include <thread>
#include <memory>
void worker(std::shared_ptr<int> ptr) {
for (int i = 0; i < 5; ++i) {
std::cout << "Thread " << std::this_thread::get_id() << " value: " << *ptr << std::endl;
++(*ptr);
}
}
int main() {
auto ptr = std::make_shared<int>(0);
std::thread t1(worker, ptr);
std::thread t2(worker, ptr);
t1.join();
t2.join();
return 0;
}
```
这个程序启动了两个线程,每个线程都会对智能指针所指向的整数进行加一操作,并输出当前值。由于使用了智能指针,可以确保多个线程访问同一个资源时不会出现竞争条件,从而保证程序的正确性。
thread 多线程程序 C++
在 C++ 中,可以使用多线程来实现并发执行的程序。C++ 11 引入了 std::thread 类,使得线程的创建变得更加方便。
下面是一个简单的多线程程序的示例:
```c++
#include <iostream>
#include <thread>
void threadFunction()
{
std::cout << "Hello from thread!\n";
}
int main()
{
std::thread t(threadFunction); // 创建一个新线程并执行 threadFunction 函数
std::cout << "Hello from main!\n";
t.join(); // 等待新线程执行完毕
return 0;
}
```
上述程序中,我们创建了一个新的线程,并让它执行 `threadFunction` 函数。在主线程中,我们输出了一条消息,并等待新线程执行完毕。
注意,线程的创建和销毁都是在 `std::thread` 类的构造函数和析构函数中完成的。
除了 `join()` 方法,还可以使用 `detach()` 方法来分离线程,使它在后台继续执行,不再与主线程同步。但是需要注意的是,分离线程后,不能再使用 `join()` 方法等待它的执行结束,否则会导致程序崩溃。
同时,需要注意多线程程序中的数据同步问题。多个线程同时访问同一个数据时,需要使用锁等机制来保证数据的一致性和正确性。