首页 > 编程语言 > 详细

c++多线程之顺序调用类成员函数

时间:2020-08-11 12:00:47      阅读:52      评论:0      收藏:0      [点我收藏+]

一、场景(leetcode1114)

一个类中三个函数

public class Foo {
  public void one() { print("one"); }
  public void two() { print("two"); }
  public void three() { print("three"); }
}
三个不同的线程将会共用一个 Foo 实例。

线程 A 将会调用 one() 方法
线程 B 将会调用 two() 方法
线程 C 将会调用 three() 方法

二、c++11中promise实现

c++11中promise,promise和future成对出现,我们可以阻塞future 的调用线程,直到set_value被执行,因此我们可以用两个promise实现三个函数的顺序执行,代码实现如下

#include <iostream>
#include <functional>
#include <future>
using namespace std;

class Foo
{
public:
    Foo();
    ~Foo();

    void first();
    void second();
    void third();

    void printFirst() {
        cout << "first"<<endl;
    }

    void printSecond() {
        cout << "second"<<endl;
    }

    void printThird() {
        cout << "third"<<endl;
    }

private:
    std::promise<void> p1;
    std::promise<void> p2;
};

Foo::Foo()
{
}

Foo::~Foo()
{
}

void Foo::first() {
     printFirst();
    p1.set_value();
}

void Foo::second() {
    p1.get_future().wait();
    printSecond();
    p2.set_value();
}

void Foo::third() {
    p2.get_future().wait();
    printThird();
}



int main()
{
    Foo *fo=new Foo();
    thread t1(&Foo::first,fo);
    thread t2(&Foo::second, fo);
    thread t3(&Foo::third, fo);
    t3.join();
    t2.join();
    t1.join();


    getchar();
    return 0;
}

三、互斥量mutex实现

c++多线程之顺序调用类成员函数

原文:https://www.cnblogs.com/xietianjiao/p/13474400.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!