Golang 과 python 스 레 드 상세 설명 및 간단 한 인 스 턴 스

Golang 과 python 스 레 드 상세 설명 및 간단 한 인 스 턴 스
GO 에서 15 개의 스 레 드 를 열 고 스 레 드 마다 전체 변 수 를 100000 회 증가 시 킵 니 다.따라서 예측 결 과 는 15*100000=150000 입 니 다.

var sum int
var cccc int
var m *sync.Mutex

func Count1(i int, ch chan int) {
  for j := 0; j < 100000; j++ {
   cccc = cccc + 1
  }
  ch <- cccc
}
func main() {
  m = new(sync.Mutex)
  ch := make(chan int, 15)
  for i := 0; i < 15; i++ {
   go Count1(i, ch)
  }
  for i := 0; i < 15; i++ {
   select {
   case msg := <-ch:
     fmt.Println(msg)
   }
  }
}

하지만 최종 결 과 는 406527
자물쇠 가 필요 하 다 는 뜻 입 니 다.

func Count1(i int, ch chan int) {
  m.Lock()
  for j := 0; j < 100000; j++ {
   cccc = cccc + 1
  }
  ch <- cccc
  m.Unlock()
}
최종 출력:1500000
python 에서:같은 방식 으로 이 루어 져 도 안 됩 니 다.

count = 0
def sumCount(temp):
  global count
  for i in range(temp):
    count = count + 1
li = []
for i in range(15):
  th = threading.Thread(target=sumCount, args=(1000000,))
  th.start()
  li.append(th)
for i in li:
  i.join()
print(count)
출력 결과:3004737
설명 에 도 자 물 쇠 를 추가 해 야 합 니 다.

mutex = threading.Lock()
count = 0
def sumCount(temp):
  global count
  mutex.acquire()
  for i in range(temp):
    count = count + 1
  mutex.release()
li = []
for i in range(15):
  th = threading.Thread(target=sumCount, args=(1000000,))
  th.start()
  li.append(th)
for i in li:
  i.join()
print(count)
출력 1500000
OK,자 물 쇠 를 넣 은 작은 열.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기