// threadMovedFixed.cpp
#include <iostream>
#include <thread>
#include <utility>
int main(){
std::thread t([]{std::cout << std::this_thread::get_id() << std::endl;});
std::thread t2([]{std::cout << std::this_thread::get_id() << std::endl;});
t.join();
t = std::move(t2);
t.join();
std::cout << "\n";
std::cout << std::boolalpha << "t2.joinable(): " << t2.joinable() << std::endl;
}
I am looking at the following snippet, and it seems there are several issues here.
(1) t2
is being moved to t
while t2
while it may be in the middle of executing its lambda. What happens to t2
in this case? Does t2
terminate right away and t
re-executes t2
's lambda from the the beginning, or does it pick up where t2
left off?
(2) t
is receiving t2
, but t
could be in the middle of its execution of the lambda. What happens here? Does t
terminate its own call immediately upon receiving t2
?
Aucun commentaire:
Enregistrer un commentaire