-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
async1의 start출력의 endl가 동작하지 않습니다
23.09.12 20:39 작성 조회수 118
1
안녕하세요,
분명 async1 start 출력 시 endl을 해주었는데도 줄바꿈 적용이 되지 않는 이유를 잘 모르겠습니다.
설명 부탁드려도 될까요?
답변을 작성해보세요.
1
Soobak
2023.09.13
안녕하세요, 답변 도우미 Soobak 입니다.
cout
의 <<
연산자를 연속적으로 사용하는 경우, 해당 연산은 원자적(atomic
)이지 않습니다.
따라서, 다른 스레드의 출력과 중첩될 수 있습니다.
예를 들어,
스레드 A
std::cout << "Hello " << "A!";
스레드 B
std::cout << "Hello " << "B!";
와 같은 코드에서 각 <<
연산자 사이에서 다른 스레드의 코드가 실행될 수 있기 때문에, Hello Hello A!B!
와 같이 출력이 중첩될 수 있습니다.
질문자님께서 첨부해주신 결과 창 중 빈 줄 부분에서, 스레드 간의 << endl
코드 부분이 중첩되어 출력된 것입니다.
따라서, 여러 스레드에서 안전하게 std::cout
과 <<
연산자를 사용하시려면, 강의 19.4 레이스 컨디션, std::atomic, std::scoped_lock 에서 학습하신 내용을 바탕으로 동기화 메커니즘(예: 뮤텍스)을 사용해야 합니다.
관련 자료 링크를 첨부드립니다.
Is cout synchronized/thread-safe?(링크)
답변 1