Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <mutex>
- #include <condition_variable>
- #include <thread>
- using namespace std;
- #define pb push_back
- #define mp make_pair
- typedef long long int ll;
- class A {
- public:
- A() : done_(false) {}
- virtual void F() {
- printf("A::F\n");
- }
- void Done() {
- std::unique_lock<std::mutex> lk(m_);
- done_ = true;
- cv_.notify_one();
- }
- virtual ~A() {
- std::unique_lock<std::mutex> lk(m_);
- cv_.wait(lk, [this] {return done_; });
- }
- private:
- std::mutex m_;
- std::condition_variable cv_;
- bool done_;
- };
- class B : public A {
- public:
- virtual void F() override {
- printf("F::B\n");
- }
- virtual ~B() override {}
- };
- int main(int argc, char** argv) {
- A *a = new B();
- thread t1([a] { a->F(); a->Done();});
- thread t2([a] { delete a;});
- t1.join();
- t2.join();
- }
Advertisement
Add Comment
Please, Sign In to add comment