C++ 标准库中的多线程支持是通过
以下是一些
std::thread
是一个类,用于表示一个线程。你可以通过将一个可调用对象(如函数、函数对象或 Lambda 表达式)传递给 std::thread
的构造函数来创建一个新线程。例如:
#include<iostream>
#include<thread>
void myFunction() {
std::cout << "Hello from thread!"<< std::endl;
}
int main() {
std::thread t(myFunction); // 创建一个新线程并运行 myFunction
t.join(); // 等待线程完成
return 0;
}
join()
是 std::thread
类的一个成员函数,用于等待线程完成。如果线程还在运行,join()
会阻塞当前线程直到该线程完成。通常,你应该在 std::thread
对象的生命周期结束之前调用 join()
或 detach()
。
3. std::thread::detach
detach()
是 std::thread
类的另一个成员函数,用于将线程与 std::thread
对象分离。一旦线程被分离,它将在后台运行,而不再受 std::thread
对象的控制。需要注意的是,分离的线程必须能够自行管理其生命周期,因为主线程可能会在分离的线程完成之前结束。
4. std::this_thread::get_id
get_id()
是一个非成员函数,返回当前线程的 ID。这个 ID 是一个 std::thread::id
类型的值,可以用于标识和比较线程。
5. std::mutex
std::mutex
是一个互斥锁类,用于保护共享数据免受多个线程的同时访问。你可以通过调用 lock()
成员函数来锁定互斥锁,并通过调用 unlock()
成员函数来解锁互斥锁。然而,更推荐的做法是使用 std::lock_guard
或 std::unique_lock
类模板,它们可以自动管理互斥锁的锁定和解锁。
6. std::lock_guard 和 std::unique_lock
std::lock_guard
和 std::unique_lock
是两个类模板,用于自动管理互斥锁的锁定和解锁。std::lock_guard
在构造时锁定互斥锁,并在析构时解锁互斥锁,而 std::unique_lock
提供了更多的灵活性,允许你在特定情况下手动解锁和重新锁定互斥锁。
7. std::condition_variable
std::condition_variable
是一个条件变量类,用于在线程间进行同步。条件变量允许一个或多个线程等待,直到另一个线程通知它们某个条件已经满足。你可以使用 wait()
、notify_one()
和 notify_all()
成员函数来实现线程间的同步。
8. std::future 和 std::promise
std::future
和 std::promise
是两个类模板,用于在线程间传递数据。std::promise
用于存储一个值或异常,并在稍后由 std::future
对象检索。这使得你可以在一个线程中异步地计算一个值,并在另一个线程中获取该值。
9. std::async
std::async
是一个函数模板,用于启动一个异步任务。它接受一个可调用对象(如函数、函数对象或 Lambda 表达式)作为参数,并返回一个 std::future
对象,用于获取异步任务的结果。std::async
可以与 std::launch::async
或 std::launch::deferred
策略一起使用,以控制任务的执行方式。
请注意,这些功能只是 C++ 多线程编程的基本概念。在实际应用中,你可能还需要处理更复杂的问题,如线程池、原子操作、锁无关编程等。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。