21xrx.com
2024-11-08 23:26:24 Friday
登录
文章检索 我的文章 写文章
C++11多线程编程
2023-07-05 01:16:59 深夜i     --     --
C++ 多线程 C++11 并发编程 线程安全

C++11是一种流行的编程语言,它提供了一些新的功能,其中包括多线程编程。多线程编程是指在一个程序中同时运行多个线程来完成任务。这种编程技术能够大大提高程序的并发性和性能,以及缩短程序的响应时间。

在C++11中,多线程编程需要使用一个新的库——thread库,它包含了一些函数和类,如std::thread、std::mutex等。以std::thread为例,它允许我们创建一个新的线程,并将其连接到一个可执行函数中。例如:


#include <iostream>

#include <thread>

using namespace std;

void func1() world!" << endl;

int main(){

  thread t1(func1);

  t1.join();

  return 0;

}

上面的代码创建了一个新的线程t1,并将其连接到函数func1中。线程t1会从func1中输出“Hello, world!”,然后结束并返回。

需要注意的是,我们在主函数中调用了t1.join(),用来等待线程t1的结束。这是一个重要的步骤,因为如果主函数先于线程t1结束,程序会出现未知的行为。

在多线程编程中,线程之间通常需要共享数据,并且存在竞争条件(因为多个线程同时访问同一个变量)。这种情况下,我们需要使用std::mutex来保护共享数据。例如:


#include <iostream>

#include <thread>

#include <mutex>

using namespace std;

mutex mtx; // 全局互斥锁

void func2(){

  mtx.lock();

  cout << "Thread " << this_thread::get_id() << " is now printing." << endl;

  mtx.unlock();

}

int main(){

  thread t2(func2);

  thread t3(func2);

  t2.join();

  t3.join();

  return 0;

}

上面的代码创建了两个新的线程,t2和t3,并将它们连接到函数func2中。func2中我们使用了全局互斥锁mtx来保护cout语句,以避免多个线程同时输出导致的混乱。输出结果类似于:


Thread 1 is now printing.

Thread 2 is now printing.

C++11还提供了一些其他的多线程编程工具,如std::async、std::condition_variable等,它们可以帮助我们更方便地编写多线程程序。

总之,C++11的多线程编程功能为我们带来了很多便利和效率,但同时它也会带来一些挑战和风险,如死锁、线程安全等问题。因此,在使用多线程编程时,我们需要小心谨慎,遵循一些基本的规则和最佳实践,以确保程序的正确性和稳定性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复