본문 바로가기
프로그래밍

이동 중 동기화(손이 많이 모자라)

by it-view 2022. 3. 10.
반응형

저는 보통 다음과 같은 맥락으로 맹세합니다.사용자 인터럽트, 신호, 타이머 등에 의해 정지되어야 하는 장기 실행 고루틴을 구현하기 위한 데몬 루프의 인수로서 문맥:


// Figure 1
type Daemon struct {
    // .... omitted
}
func (d *Daemon) Run(ctx context.Context) {
    for {
          select {
                case: <-ctx.Done:
                  return
            default:
          }
          // do your thing
    }
}
// Caller's code somewhere
ctx, cancel := context.WithCancel(...)
                                  d.Run(ctx)
// sometime later...
cancel()

그 이유는 코드 작성기가 sync를 사용하는 추가 동기화를 NOT 사용할 수 있기 때문입니다.뮤텍스, 찬, 싱크로.상태, 동기화/아토미 등

(게다가, 저는 이상값 객체(Daemon here )와 데몬 루프 상태(예: 루프 카운터 또는 연결 풀 등)를 구분하는 것도 좋아하지만, 저는 다른 방향으로 돌아갑니다...)

그래서… 네, 이미 제 머릿속에 해결책이 있어요. 하지만 만약 내가 이것을 시행할 수 없다면?

 

예를 들어, 역사적 이유로 이 패턴으로 전환하는 것이 가능하지 않다면 어떨까요? 만약 우리 손이 묶였다면요?

댓글