2011-12-05 2 views
-2

내가 좋아하는 실행의 두 개의 스레드,이동 스레드 - 일시 정지 실행

Routine 1 { 
// do something 
} 
Routine 2 { 
// do something 
} 

가 몇 초 동안 루틴 1 일과 2의 실행을 일시 정지 할 수 있는가, 어떻게 가능 할 수 있나요?

+2

대다수의 (다중) 복제물에 대한 질문을 하향 투표했습니다. – zzzz

+0

[동시 실행 루틴의 상호 배제] 가능한 중복 (http://stackoverflow.com/questions/8315970/mutual-exclusion-of-concurrent-go-routines) – peterSO

+0

그건 내 질문과 같지 않았습니다. 내 것은 완전히 다릅니다. – alessandro

답변

1

하나의 스레드에서 다른 스레드를 암시 적으로 제어 할 수 없습니다. 당신은 이것을 할 수 있고, bool을 정의 할 수 있으며, 시간에 따라 멈출 수 있습니다. 잠깐 (2 * 1e9).

6

다른 goroutine의 실행을 제어 할 수 없습니다. 골 루틴은 협동 조합입니다. 그들은 서로를 지배하지 않습니다.

당신이 할 수있는 일은 그것이 루틴 2에서 루틴을 진행할 수 있는지를 확인하는 포인트를 넣는 것입니다.

wait <- true 
// whatever stuff goes here 
resume <- true 

왜 당신이 goroutine을 일시 정지하고 싶어 : 이러한

// do stuff 
select { 
case <-wait: 
    <-resume 
default: 
} 

그런 다음 루틴 1 일이 기다릴 말하는 일과 2에 신호를 보낼 수 루틴 말할 수

로? 그게 당신의 질문에 더 잘 대답 할 수 있습니다. 자신이 원하는 방식보다는 자신이하려는 것을 시작하는 것이 가장 좋습니다. 그렇게하면 원래 상상했던 방법을 대신 할 수있는 방법 대신 가난한 대체물을받는 대신 언어에서 실제로 원하는 것을 얻을 수있는 방법을 찾을 수 있습니다.