2013-03-10 2 views
9

나는이 웹 소켓에 std::queue에 대한 boost::lockfree::queue을 대체하기 위해 노력하고있어 ++ 예를 https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp은 boost :: lockfree :: queue가 C++ 11에서 lockfree가 아닌가?

가 정말 아직 boost::unique_lock 라인을 제거하는 구문을 변경하지 않고 할 수있는 것 같습니다. 내가 부스트 예를 볼 때

그러나, 내가 lockfree::queue의 문서를 통해 볼 때 lockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html

를 확인하는 코드 섹션을 가지고, 그것은 is_lock_free()http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html에이 말한다 :

bool is_lock_free (void) const; 그것은 단지 확인

경고

, 큐의 머리와 꼬리 노드와 가능리스트가 잠금이없는 방식으로 수정 될 수있는 경우. 대부분의 플랫폼에서 전체 구현은 사실이라면 잠금이 없습니다. C++ 0x 스타일의 어 그리틱을 사용하면 운영 체제에서 추가 노드가 할당되는 경우 불가능한 모든 내부 노드 을 테스트해야하기 때문에 완전히 정확한 구현을 제공 할 가능성이 없습니다.

: 구현이 lock-free 인 경우 true를 반환합니다.

"C++ 0x- 스타일 원자"가 무엇인지 전혀 알지 못하지만 저는 C++ 0x가 C++ 11이라는 것을 확신합니다.

저는 C++ 11을 사용하고 있습니다. std::queueboost::lockfree::queue으로 대체하기 만하면 lockfree가 구현되지 않을까요?

+5

잠금 해제 알고리즘을 사용하기 전에 측정을 권장합니다. 깔끔하지만 _scalable_ 및 _safe_ (즉, 우선 순위 반전 방지)로 설계되었습니다. 성능은 덜 우려스럽고 일반적으로 더 나쁩니다. 예를 들어, Boost의 lock-free 대기열 구현은 여러 코어와 많은 양의 경합이 없으면 잠긴'std :: queue'보다 느립니다. –

+2

'C++ 0x- 스타일 원자력이란 "[boost :: atomic] (http://www.boost.org/doc/libs/1_53_0_beta1/doc/html/atomic)에 대한 이야기입니다. html). –

+0

+1 lib 예제 – ExoticBirdsMerchant

답변

8

아니요. "완전히 정확한 구현을 제공 할 가능성 없음"주석은 is_lock_free()을 나타냅니다. 즉, is_lock_free()이 구현이 잠금이 해제되었는지 정확하게 반영하는 결과를 반환하지는 않습니다. 그러나 is_lock_free()이 true를 반환하면 구현시 잠금이 해제되지만 철저한 보장은되지 않습니다.

+0

고맙습니다! 위의 예와 함께 사용하는 것이 안전하다고 말합니까? 또는 정기적으로 메시지/연결 유실을 예상해야합니까? –

+0

왜 길을 잃을까요? –

+0

@CoryNelson 전 C++을 전혀 경험하지 않았기 때문에. 'is_lock_free'는 잠금이 풀리지 않은 상황이있을 수있는 것처럼 들리므로 잃어버린 메시지/연결처럼 "나쁜"것이 발생할 수 있습니다. –

-7

"C++ 0x- 스타일 원자"가 무엇인지 전혀 알지 못하지만 C++ 0x는 C++ 11을 의미합니다.

  • C + +0는 C++ 03 및/또는 C++ 07 C++ 표준을 의미합니다.
  • C++ 1x는 일반적으로 C++을 나타냅니다. 11
  • C++ 1y는 C++ 11 후속을 나타냅니다.
+6

그건 완전히 잘못되었습니다. C++ 0x와 C++ 1x는 모두 C++ 11을 참조합니다. C++ 1y는 C++ 14 또는 C++ 17을 의미하지만 일반적으로 전자를 의미합니다. –