mardi 25 avril 2017

Accessing a moved std::string in a new thread

Consider the case below

The name string is moved as an argument to the thread.

 void start(std::string&& name) {
        t = std::thread{&ThreadRunner::run, this, std::forward<std::string>(name)};
    }

The thread's run function also takes a rvalue reference.

 void run(std::string&& name) {
        const auto errnum = pthread_setname_np(t.native_handle(), name.c_str());
        if (errnum != 0) {
            std::cout << "ERROR " << std::endl;
        }
    }

The thread is created via the start function as below:

  ThreadRunner r;
  r.start(std::string("somename"));

The question is. Could it be possible that the std::string accessed in the functionrun via pthread_setname_np can be junk because the temporary went out of scope when it's scope ended?

Demo In the above demo, after call ended, is it guranteed that the somename string is valid in the function run?

Aucun commentaire:

Enregistrer un commentaire