我有两个线程,一个线程应该接收并处理另一个线程的请求.第二种是同步传输请求和接收响应.我尝试了以下方案:对的队列(值,承诺).第一个线程创建一个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)