当前位置:网站首页>[C + + learning notes] how about the simple use of the C + + standard library STD:: thread?

[C + + learning notes] how about the simple use of the C + + standard library STD:: thread?

2020-11-07 20:19:30 Muge love programming

std::thread yes C++ 11 The newly introduced standard thread library . In the same way C++ 11 Newly introduced lambda With the help of function ,std::thread It's very convenient to use :

int a = 1;

std::thread thread([a](int b) {

    return a + b;

}, 2);

The only thing that's a little bit puzzling about it is that it provides join and detach function , It literally means that the former merges threads , The latter separates threads . Whether it's a merger or a separation , Will result in std::thread::joinable() return false, And before that, it was true( Even if the task of this new thread has been executed !).

The meaning of merging thread is clear , The binding thread is merged into the current thread for execution , The current thread is blocked , Until the merged thread is executed .


 

Separate threads are newly created threads and std::thread Object separation , The created thread runs independently .std::thread The thread will no longer be held . Some people may find this meaningless , But in theory there are still , Like after separation , We can deconstruct std::thread object , It doesn't affect the thread created ( The created thread will continue to run ).

int a = 1;

{

    std::thread thread1([a](int b) {

        return a + b;

    }, 1);

    thread1.detach();

}

{

    std::thread thread2([a](int b) {

        return a + b;

    }, 2);

}

Take the above code for example ,thread1 No mistakes , but thread2 Will cause the program to exit . as a result of std::thread If the thread is not merged or detached , The program will exit automatically !

~thread() {

    if (joinable()) std::terminate();

}

Its source code is located in https://gcc.gnu.org/onlinedocs/gcc-7.5.0/libstdc++/api/a00158_source.html, Implementation is very simple , Is based on pthread Encapsulation , Its content is only thread ID :

class thread {

public:

    typedef __gthread_t native_handle_type;

    class id {

        native_handle_type  _M_thread;

    };

private:

    id _M_id;

}

 


 

See here, are you right about “C++” I have a little new understanding ~

If you like this article , Move your little finger , Pay attention to it ~

If you want to be a programmer too , Want to master programming quickly , Here's a Learn from Penguin circle

There are senior professional software development engineers , Answer all your doubts online ~C++ introduction “so easy”

 

Programming learning books :


 

Programming learning video :


 

版权声明
本文为[Muge love programming]所创,转载请带上原文链接,感谢