Multithreading c+的优势+;11线

Multithreading c+的优势+;11线,multithreading,c++11,Multithreading,C++11,线程被添加到C++11语言中 那么我想知道它们的区别、优势和影响是什么 如果此代码是由c++03 #include <iostream> #include <pthread.h> void *call_from_thread(void *) { std::cout << "Launched by thread" << std::endl; return NULL; } int main() { pthread_t t;

线程被添加到C++11语言中

那么我想知道它们的区别、优势和影响是什么

如果此代码是由
c++03

#include <iostream>
#include <pthread.h>

void *call_from_thread(void *)
{
    std::cout << "Launched by thread" << std::endl;
    return NULL;
}

int main()
{
    pthread_t t;

    pthread_create(&t, NULL, call_from_thread, NULL);

    pthread_join(t, NULL);
    return 0;
}
那么,我看不出有什么根本的好处


此外,当它被称为语言的一部分时,我对此感到困惑,因为我没有看到新的关键字或新的语法。我刚刚看到一个新的标准库。还不止这些吗?这只是对
pthread
的一种解释吗?

除了更具可移植性之外,C++11线程还提供了其他好处:

  • 允许以类型安全的方式将参数(以及多个)传递给线程处理程序
    pthread\u create
    传递单个
    void*
    ,而使用
    std::thread
    时,如果出现错误而不是运行时错误,则会出现编译时错误
  • 线程处理程序可以是lambda
  • std::thread
    是一个对象,而不是一个指针,这使得管理对象生命周期更加容易,并降低了指针悬空的风险,特别是当与
    std::unique_ptr
    std::shared_ptr
    结合使用时,如果甚至需要指针杂耍的话
这些是我想到的直接好处


至于标准库和语言规范:它们都是同一标准的一部分,因此都被认为是“C++11”。注意:代码> STD::线程< /代码>不能在C++ 03中实现,因为移动语义在C++ 11和 STD::线程实现了移动。

< P> C++线程库的主要优点是可移植性。与许多其他C++标准库设施一样,依赖于线程的库依赖于pPults或Win32 API,可以提供更多的控制线程,而不是C++线程库。例如,在Windows Win32 API线程库中,可以设置线程堆栈大小,而不使用C++平台线程库,而不使用依赖于平台的代码。像
TerminateThread
这样的API函数允许开发人员终止他们正在运行的线程(一个非常危险的操作)或使用函数
SetThreadPriority
设置线程优先级

<>但是,使用C++线程库使代码平台独立。这不仅仅是关于类
线程
。还有其他的设备,如互斥体、条件变量、锁等,它们已经被标准化,因此每个C++实现都应该实现它们以符合C++标准。
<> P>所以,使用C++线程库总是一个折衷方案。您正在失去对线程的某种程度的控制,但您的代码是可移植的。如果您真的需要一些低级功能,您可以使用
std::thread::native_handle
,它允许您混合使用标准代码和平台相关代码


此链接提供了一个很好的示例,说明如何混合使用类
线程
和pthread库。

2019年听起来很有趣,但std::thread的一个小缺点(因为您问过它)是在二进制文件中添加了约130kb的代码。

第一个是不可移植到非POSIX平台的。和<>代码> /COD>是C++标准库的一部分(不像<代码> <代码>】非HyyHy羊,Windows有问题吗?我不知道你的意思。code>pthread
在Windows上不存在,它不是POSIX平台
#include <iostream>
#include <thread>

void call_from_thread()
{
    std::cout << "Hello, World" << std::endl;
}

int main()
{
    std::thread t1(call_from_thread);
    t1.join();
    return 0;
}