c++实现多线程操作
时间: 2025-02-22 11:27:26 浏览: 9
C++ 多线程编程简介
自C++11起,标准库加入了对多线程的支持,使得开发者可以直接利用<thread>
头文件来创建和管理线程。在此之前版本的C++则依赖于特定的操作系统API来进行多线程开发,例如Linux下的<pthread.h>
或是Windows环境里的<windows.h>
[^1]。
下面提供了一个简单的例子展示如何安全地使用类成员函数作为线程入口:
#include <iostream>
#include <thread>
class SafeMyClass {
public:
void operator()() const {
std::cout << "Thread " << std::this_thread::get_id()
<< " started\n";
// 执行一些工作...
std::cout << "Thread " << std::this_thread::get_id()
<< " finished\n";
}
};
int main() {
SafeMyClass obj;
std::thread t(obj);
if(t.joinable())
t.join();
return 0;
}
上述代码通过重载operator()
的方式避免了对象生命周期结束前就销毁的情况发生,从而防止潜在的未定义行为出现[^2]。
另外,为了更好地控制多个线程之间的协作关系,还可以考虑使用std::this_thread::yield()
方法主动让出当前线程的时间片给其他等待执行的线程。这样做有助于提高系统的响应性和资源利用率[^3]。
对于更复杂的场景,比如需要在线程间共享数据或同步访问临界区,则可能需要用到互斥锁(mutexes)、条件变量(condition variables)等高级特性。这些工具可以帮助解决竞争条件(race conditions),死锁(deadlocks)等问题,确保并发程序的安全性和稳定性。
创建并加入两个独立工作的线程实例
#include <iostream>
#include <thread>
void functionA(){
for(int i=0;i<5;++i){
std::cout<<"Function A is running.\n";
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
void functionB(){
for(int j=0;j<5;++j){
std::cout<<"Function B is also working.\n";
std::this_thread::sleep_for(std::chrono::milliseconds(15));
}
}
int main(){
std::thread threadA(functionA), threadB(functionB);
if(threadA.joinable())
threadA.join();
if(threadB.joinable())
threadB.join();
return 0;
}
此段代码展示了怎样启动两个分别执行不同任务的线程,并最终调用各自的join方法以保证主线程不会先于子线程退出而造成意外的结果。
阅读全文
相关推荐

















