에 의해 생성 된 대기열로 푸시 할 수 없습니다. 기본적으로 구조체를 대기열에 매핑하는 정적지도가 있습니다. 그러나 대기열로 밀어 넣으려고하면 아무 것도 푸시하지 못합니다. 내가 큐에 밀어하려고하는 기능에 정적 맵 <struct, queue>
struct SignalID_t {
unsigned int lock;
unsigned int cond;
SignalID_t(unsigned int lock_, unsigned int cond_):lock(lock_), cond(cond_) {}
};
class SignalIDComp {
public:
bool operator()(const SignalID_t& a, const SignalID_t& b) const
{return a.lock == b.lock && a.cond == b.cond;}
};
class ThreadManager{
public:
static std::queue<ucontext_t *>& waitingQ(SignalID_t id)
{return threadsWaitingOnConditions[id];}
private:
static std::map<SignalID_t, std::queue<ucontext_t*>> threadsWaitingOnConditions;
}
map<SignalID_t, queue<ucontext_t *>, SignalIDComp> ThreadManager::threadsWaitingOnConditions;
class Threads{
void thread_wait(int lock, int cond){
SignalID_t id(lock, cond);
ThreadManager::waitingQ(id).push(ThreadManager::getRunningThread());
if (ThreadManager::waitingQ(id).empty())
cout << "failed to push thread to cond waiting Q" << endl;
}
}
, 나는 즉시 비어이고 항상 cout을 그것입니다 있는지 확인하기 위해 큐를 테스트합니다. 나는 그것이 맵이 정적이고 큐가 제대로 초기화되지 않는다는 사실과 관련이 있다고 생각하지만, 그것을 고칠 수는 없다.
이 실제 코드가 아닙니다 : 클래스 정의는 세미콜론으로 종료되어야한다, ThreadManager :: getRunningThread()도 존재하지 않는다. 실제 코드를 게시하십시오. –