• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

async1의 start출력의 endl가 동작하지 않습니다

23.09.12 20:39 작성 조회수 118

1

안녕하세요,

분명 async1 start 출력 시 endl을 해주었는데도 줄바꿈 적용이 되지 않는 이유를 잘 모르겠습니다.

설명 부탁드려도 될까요?asdf.PNG

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

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?(링크)