2013-02-27 4 views
3

glib는 아니 세마포어/잠금/등. 스레드 간 통신을 허용 GAsyncQueue라는 데이터 구조를 갖고, 심지어 생산자/소비자 솔루션을 구현하는 작업을 단순하게. 두 개의 다른 스레드가 데이터를 GAsyncQueue 구조로 푸시하는 경우 push 함수는 내부적으로 큐에 대한 상호 배타적 인 액세스를 구현합니다. 더 awesomely, 스레드가 pop 함수를 호출하고 거기에 데이터가 없으면 일부 데이터가 다른 스레드에 의해 큐에 푸시 될 때까지 호출 스레드가 차단됩니다. 이 모든 작업은 개발자에게 투명하게 스레드에 안전한 방식으로 수행됩니다. 나는 그것을 좋아하지만큼 glib의 GAsyncQueue는 C++과 동일합니까?

는하지만,이 라이브러리는 C를 위해 지어진, 더 높은 수준의 언어에 대한 더 나은 대안이있을 수 있습니다. ... 어쨌든 입심 사용에 대한 생각 해요,하지만은 C++ 코드에서 C 라이브러리를 사용하는 이상한 느낌이 그래서

, 질문은 다음과 같습니다 입심에 해당하는 권장 ++는 C가? 더 구체적으로, GAsyncQueue과 동일한 기능을 제공하는 C++ 라이브러리가 더 많이 있습니까?

+0

'std :: queue','std :: mutex' 및'std :: condition_variable'을 사용하여 작성하는 것이 꽤 쉽습니다. –

+1

@JonathanWakely 확실 합니다만, 쉽 겠지만 나는 차라리 잘 테스트 된 (아마도 최적화 된) 메시지 큐 구현을 처음부터 직접 구현하는 것보다 훨씬 효율적으로 사용할 것이다. –

답변

3

C++ 프로그램에서 C를 사용하는 데 전혀 문제가 없습니다 (C++ 구현은 주로 C 런타임을 기반으로합니다. 예를 들어 C++ 11 스레드 지원은 pthread 라이브러리 없이는 살 수 없습니다. 플랫폼). 필자는 도구/라이브러리만을 선택하지 않고 작성된 언어를 전적으로 기반으로합니다.하지만 다른 것을 사용해야하는 경우 glib은 제공하는 세계 유일의 라이브러리가 아닌 비동기 메시지 전달 기능을 제공합니다 (그런데, IPC를 지원하는 것처럼 보이지는 않습니다.)

: 어쨌든, 여기에 바로 (내 생각으로 무작위로, 임의의 순서로) 내 마음에 와서 C++ 프레임 워크의 목록입니다

각자에는 그것의 자신의 강점 및 약점이 있고, 어느 것은 진짜로 당신의 요구 조건이 무엇인지에 달려있다. 전반적인 응용 프로그램 아키텍처와 비동기 메시지 전달이 응용 프로그램의 모든 구성 요소에 얼마나 잘 맞는지주의해야합니다. 예를 들어, 단순한 메시지 전달 이상을 포함하는 다소 복잡한 응용 프로그램에서 비동기식 대기열은 흔히 사용중인 이벤트 알림 메커니즘과 통합됩니다 (예 : OSX는 kqueue/GCD 주위에 구축 됨).

희망이 있습니다. 행운을 빕니다!

+0

IPC의 좋은 점은 동기화 프리미티브를 명시 적으로 사용하지 않고도 스레드 간 통신을 의미했습니다. 그에 따라 편집 됨. –

관련 문제