FIX: 다중 스레드 응용 프로그램의 std::map::erase 또는 std::set::erase에서 액세스 위반

기술 자료 번역 기술 자료 번역
기술 자료: 281446 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

여러 스레드에서 동시에 std::map::erasestd::set::erase 구성원 함수를 호출하면 액세스 위반이 발생할 수 있습니다.

현재 상태

Microsoft는 이 문서의 시작 부분에 나열한 제품에서 이 문제를 확인했습니다.

이 버그는 Microsoft Visual Studio 6.0 서비스 팩 5(SP5)에서 해결되었습니다.

서비스 팩 5를 다운로드하려면 다음 Microsoft 웹 사이트의 Visual Studio Product Updates 페이지를 참조하십시오.
http://www.microsoft.com/korea/msdn/vstudio/downloads/updates/sp/vs6/sp5/default.asp

추가 정보

248477에서 설명한 버그를 해결했을 때 버그가 Visual Studio 6.0 서비스 팩 4(SP4)에 소개되었습니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248477 FIX: 다중 스레드 응용 프로그램에서 STL Map 또는 Set를 사용하면 교착 상태가 된다

동작을 재현하는 방법

다음 코드 예제는 버그를 보여줍니다.
// Test.cpp
// Compiler option needed: /MT or /MD
#include <windows.h>
#include <set>

typedef std::set<int> TestSet;

DWORD WINAPI Worker( LPVOID )
{
TestSet set;
int g_cIters =4;

    for( int i=0; i < g_cIters; i++ )
    {
        int r = rand();
        int j;

        for( j=0; j < r; j++ )
        {
        set.insert( j );
        }

        for( j=0; j < r; j++ )
        {
            TestSet::iterator it = set.find( j );
            set.erase( it );
        }
    } 

    return 0;
}     
      
void main()
{
   
    int cThreads = 10;

    HANDLE  aThreads[10];

    for( int i=0; i < cThreads; i++ )
    {
        aThreads[i] = CreateThread( NULL, 0, Worker, NULL, 0, NULL );
    }

    WaitForMultipleObjects( cThreads, aThreads, TRUE, INFINITE );
} 
				




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 281446 - 마지막 검토: 2007년 1월 19일 금요일 - 수정: 2.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • The C Run-Time (CRT)?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 6.0 서비스 팩 4
키워드:?
kbbug kbcpponly kbfix kbstl kbvc600fix kbvs600sp5fix KB281446
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com