无锡科技网站建设,免费的网页模板网站,建立网站需要哪几个,如何规范网站使用1. 当把函数对象传入到线程构造函数中时#xff0c;需要避免“最令人头痛的语法解析”。如果传递了一个临时变量#xff0c;而不是一个命名的变量#xff1b;C编译器会将其解析为函数声明#xff0c;而不是类型对象的定义。 例如#xff1a; class background_task
{
publ…1. 当把函数对象传入到线程构造函数中时需要避免“最令人头痛的语法解析”。如果传递了一个临时变量而不是一个命名的变量C编译器会将其解析为函数声明而不是类型对象的定义。 例如 class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};
background_task f;
std::thread my_thread(f);//正确std::thread my_thread(background_task());//my_thread变成了一个函数 这里相当与声明了一个名为my_thread的函数这个函数带有一个参数(函数指针指向没有参数并返回background_task对象的函数)返回一个 std::thread 对象的函数而非启动了一个线程。 使用在前面命名函数对象的方式或使用多组括号①或使用新统一的初始化语法②可以避免这个问题。如下所示 std::thread my_thread((background_task())); // 1
std::thread my_thread{background_task()}; // 2 使用lambda表达式也能避免这个问题。 std::thread my_thread([]{
do_something();
do_something_else();
}); 2. 精心组织代码来保护共享数据 切勿将受保护数据的指针或引用传递到互斥锁作用域之外无论是函数返回值还是存储在外部可见内存亦或是以参数的形式传递到用户提供的函数中去。转载于:https://www.cnblogs.com/zhanghu52030/p/9322958.html