2014-01-23 2 views
0

나는 이진 데이터를 읽고 쓰는 데 std :: stringstream을 사용하고 있습니다.C + + 문자열 스트림에 병렬 읽기 쓰기

std::stringstream strm(std::stringstream::binary|std::stringstream::in|std::stringstream::out); 

    strm.write(...) //happens in one thread 
    strm.read(...) //happens in another thread 

C++ 표준은 stringstream에 대한 병렬 읽기 쓰기를 보장합니까? 아니.

+0

'std :: stringstream'의 소스에 뮤텍스 또는 아톰이 있습니까? – woolstar

+0

'std :: stringstream'의 특정 구현에 관심이 없습니다. 나는 표준의 규격에 관심이있다. – nature1729

+0

"표준 호환"stdC++ 라이브러리에 스레드 안전성을위한 뮤텍스 또는 기타 메커니즘이 없으면 표준에 필요하지 않은 높은 가능성이 있습니다. – woolstar

답변

0

/usr/local/pgi/linux86-64/13.10/include/CC/fstream.h에있는 내 fstream.h 파일에는 뮤텍스 잠금에 대한 언급이 없습니다. 또한 프로그램에서 나는 동일한 시간에 쓰여질 경우 문자열 스트림 파일에 대한 연산자가 < < 인 인터리브가 될 수있는 출력을 작성했습니다.

동일한 파일을 읽고 쓰고 있기 때문에 선 순서가 중요하다고 생각합니까? 이와 같이, 나는 스레드들 사이에 전역 mutex 잠금을 원한다고 생각합니다.

같은 뭔가 :

#include .... 

pthread_mutex_t FileMutex = PTHREAD_MUTEX_INITIALIZER; 

std::stringstream strm(std::stringstream::binary|...) 

int main() 
{ 

blah blah 

pthread_create(&threads, NULL, function, voidPtrToArguments); 

blah blah 

} 

void *function(void *voidPtrToArguments) 
{ 
blah blah some more 

pthread_mutex_lock(&FileMutex); 
strm.write(...); 
pthread_mutex_unlock(&FileMutex); 

} 

과 기능을 읽기 위해 다음 같은.

+0

C++ 11 표준은 병렬 동작 또는'std :: stringstream'에 특정한 것을 말합니까? 특정 구현이 중요합니다. 아직'std :: stringstream'에 대한 스펙에 더 관심이 있습니다. – nature1729

+0

찾으시는 분 : 27.2.3 스레드 안전 [iostreams.threadsafety] 1 스트림 객체 (27.8, 27.9), 스트림 객체 (27.6) 또는 C 라이브러리 스트림 (27.9.2) 에 동시 액세스 달리 명시되지 않는 한 다중 스레드는 데이터 경합 (1.10)을 초래할 수 있습니다 (27.4). [참고 : 데이터 경주 의 결과는 뜻밖의 동작입니다 (1.10). - end note] 2 하나의 스레드가 라이브러리 호출을 만들어서 값을 스트림에 쓰고 다른 스레드가이 값을 라이브러리 호출 b를 통해 스트림에서 값으로 읽으면 결과가 a 데이터 경쟁이면, a의 쓰기가 b의 읽기와 동기화됩니다. – chrisb2244

+0

형식이 너무 잘못 작성된 것에 대해 사과드립니다. 소스는 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf 페이지 980입니다. – chrisb2244