Is it safe to pass arguments by reference into a std::thread function?

前端 未结 2 1645
#include 
#include 
#include 
#include 

using namespace std;

void f(const vector& coll)
{
            


        
2条回答
  •  南方客
    南方客 (楼主)
    2021-02-19 04:12

    As @T.C.'s comment, you're not passing reference to thread, you just make a copy of the vector in the thread:

    thread(f, coll).detach(); // It's NOT pass by reference, but makes a copy.
    

    If you really want to pass by reference, you should write this:

    thread(f, std::ref(coll)).detach(); // Use std::ref to pass by reference
    

    Then the code will get segment fault if the thread tries to access the vector, since when the thread runs, it's very likely the vector is already destructed (because it went out of it's scope in the main program).

    So to your question:

    Is it safe to pass arguments by reference into a std::thread function?

    • It is safe if you're sure the object remains valid during the thread's running;
    • It is NOT safe if the object is destructed, and you will get segment fault.

提交回复
热议问题