小编Gek*_*eka的帖子

std :: future.get()有时会卡在os x中

我有两个线程,一个线程应该接收并处理另一个线程的请求.第二种是同步传输请求和接收响应.我尝试了以下方案:对的队列(值,承诺).第一个线程创建一个promise并将其推送到同步队列中并等待返回值future.get()

问题是有时线程卡住future.get(),但当我暂停程序执行并继续它再次正常工作.这种卡住具有随机性.

FutureQueue.h

#ifndef FutureQueue_h
#define FutureQueue_h

#include <queue>
#include <future>
#include <thread>
#include <mutex>
#include <condition_variable>

template <typename T, typename R>
class Work{
public:
    Work(){

    }
    Work(T value, std::promise<R>* promise){
        m_value = value;
        m_p_promise = promise;
    }
    std::promise<R>* m_p_promise;
    T m_value;
public:
    T getValue(){
        return m_value;
    }
    void setResult(R result){
        m_p_promise->set_value(result);
    }
};


template <typename T, typename R>
class FutureQueue
{
public:
    Work<T,R> getWork(){
        auto p = pop();
        return Work<T,R>(p.first,p.second);
    }
    R execute(T value)
    {
        std::promise<R> …
Run Code Online (Sandbox Code Playgroud)

c++ macos synchronization future clang

6
推荐指数
1
解决办法
340
查看次数

标签 统计

c++ ×1

clang ×1

future ×1

macos ×1

synchronization ×1