下面就详细讲解C++11/14线程的创建与分离的实现的攻略。
线程的创建
使用C++11/14标准提供的std::thread
库可以创建线程。线程的创建可以通过以下操作:
-
定义一个线程对象,并指定线程函数
c++
std::thread my_thread(my_func);这里的
my_func
是一个函数指针,指向线程所要执行的函数。 -
定义一个匿名线程对象,并通过函数指针指定线程函数
c++
std::thread(my_func); -
定义一个线程对象,通过Lambda函数指定线程函数
c++
std::thread my_thread([](){/* your code */});
线程对象创建后会立即开始执行指定的线程函数。
线程的分离
线程可以被设置为“可分离”的,即该线程可以独立运行,不需要等待主线程退出。线程的分离可以通过以下操作:
-
在线程对象创建后,通过
std::thread::detach()
方法将线程设置为可分离状态c++
std::thread my_thread(my_func);
my_thread.detach(); -
在创建线程时通过
std::thread
构造函数的参数std::thread::detach
将线程设置为可分离状态c++
std::thread my_thread(my_func);
my_thread = std::thread(std::move(other_thread));
在设置了线程分离后,由于线程已经独立运行,不能再通过std::thread::join()
方法等待线程退出,也不能通过线程对象访问该线程的状态和资源。
示例
以下是两个线程创建示例:
void print_num(int num)
{
for(int i=0; i<num; ++i)
{
std::cout<<i<<" ";
}
}
int main()
{
// 示例一:通过函数指针创建线程
std::thread my_thread(print_num, 10);
// 示例二:通过Lambda函数创建线程,并将其设置为可分离
std::thread my_detached_thread([](){ std::cout<<"This is a detached thread."<<std::endl; });
my_detached_thread.detach();
// 等待前两个线程结束
my_thread.join();
return 0;
}
在这个示例中,第一个创建的线程是非独立的,它将输出从0到9的数字,并等待输出完成后才会返回。第二个创建的线程是独立的,并将输出一条消息。在主线程中,我们通过std::thread::join()
等待第一个线程退出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++11/14 线程的创建与分离的实现 - Python技术站