ACE의 ACEFuture는 단지 한 번의 디자인 원인으로 추측하고 주동적인 대상의 장점으로 추측할 수 있다
template <class T> int
ACE_Future_Rep<T>::set (const T &r,
ACE_Future<T> &caller)
{
// If the value is already produced, ignore it...
if (this->value_ == 0)
{
ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX,
ace_mon,
this->value_ready_mutex_,
-1);
// Otherwise, create a new result value. Note the use of the
// Double-checked locking pattern to avoid multiple allocations.
if (this->value_ == 0) // Still no value, so proceed
{
ACE_NEW_RETURN (this->value_,
T (r),
-1);
// Remove and notify all subscribed observers.
typename OBSERVER_COLLECTION::iterator iterator =
this->observer_collection_.begin ();
typename OBSERVER_COLLECTION::iterator end =
this->observer_collection_.end ();
while (iterator != end)
{
OBSERVER *observer = *iterator++;
observer->update (caller);
}
// Signal all the waiting threads.
return this->value_ready_.broadcast ();
}
// Destructor releases the lock.
}
return 0;
}
한 번만 사용하는 이유는 클라이언트가 현재 되돌아오는 값이 그 기능이 호출된 되돌아오는 값이라는 것을 확인하기 위해서입니다.예를 들어 클라이언트가 두 번의 호출을 촉발한 후에 어떤 원인으로 인해 한 번의 답장 결과만 받았다. 만약에 여러 번의 복사 결과를 충분하게 한다면 이때 도대체 이 답장이 그 호출 결과의 답장을 가리키는지 알 수 없다.
매개변수로 구분하면 매개변수 간에 ID가 중복되지 않도록 하는 등의 문제가 복잡해집니다.
그래서 한 번만 사용할 수 있도록 하는 것이 가장 빠르고 간단한 방법이다.
주동 대상의 장점: 주동 대상 모델에서 집행 기능은 호출자에게서 집행하는 것이 아니라 호출자에게서 집행되고 호출자는 내부에서 메시지를 전달하는 방식으로 이런 호출을 직렬로 해서 여러 호출자의 병렬 호출 대상 기능의 문제를 해결한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.