Re: [心得] agoda senior SWE (data engineering)

看板Soft_Job作者 (流浪吧。)時間7年前 (2017/04/18 12:11), 編輯推噓4(409)
留言13則, 8人參與, 最新討論串2/2 (看更多)
有人來信討論最後一題, 我來說明一下當初在面試官邊半提示半猜之後得到的答案和想法 題目基本上在問的是: 有一個變數x,初始值是0 同時開五個thread, 五個thread同時做x = x + 1 那最後五個thread都跑完之後,x的可能最大值與可能最小值是什麼  ※ 引述《frouscy (流浪吧。)》之銘言: : - 請回答下面的code裡面,x可能的最大值和最小值是什麼: : x = 0 # global variable : # thread execution function : def exec(): : for _ in xrange(5): : x = x + 1 : # main function : def main: : for _ in xrange(5): : # launch 5 threads and run the exec function : Thread.run(exec()) 為免防雷,答案請page down ANS: 最小值2,最大值25 解答再防雷XD。 SOLUTION: 25我想很容易理解, 下面解釋一下2是怎麼來的 其實要理解這個2並不需要5個thread, 只要看兩個thread就足夠了 以下T1代表第一個Thread,T2代表第二個Thread r0代表從x讀0進來,w1代表寫1到x裡面去 T1 r0 T2 r0 T1 w1 T1 r1 T1 w2 T1 r2 T1 w3 T1 r3 T1 w4 T2 w1 T1 r1 T2 r1 T2 w2 T2 r2 T2 w3 T2 r3 T2 w4 T2 r4 T2 w5 T1 w2 這樣最後就會得到最小值2 如果Thread在兩個以上的話, 其他幾個thread就是隨便在T1 r1到T1w2之間隨便亂做 結果都不會被影響到 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.162.20 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1492488698.A.4F3.html

04/18 12:29, , 1F
cool 我本來猜5
04/18 12:29, 1F

04/18 13:02, , 2F
有道理,兩條以上可能會發生最小的情形
04/18 13:02, 2F

04/18 13:57, , 3F
不是25? Python的global intepreter lock應該會避免這
04/18 13:57, 3F

04/18 13:57, , 4F
種情況
04/18 13:57, 4F

04/18 14:15, , 5F
考官當時有說這是psuedo code, 只是用python語法而已
04/18 14:15, 5F

04/18 14:16, , 6F
python也只有CPython有GIL XD
04/18 14:16, 6F

04/18 14:18, , 7F
要問的就是我中文描述的,就不用用語言特性想了
04/18 14:18, 7F

04/18 14:38, , 8F
ok thanks
04/18 14:38, 8F

04/18 19:15, , 9F
沒想過他讀出來的時候會被另一個已經讀出來的寫回去…
04/18 19:15, 9F

04/19 07:38, , 10F
我看不太懂題目,是一個thread做5次X=X+1嗎?
04/19 07:38, 10F

04/19 08:45, , 11F
5個thread 每個thread做五次
04/19 08:45, 11F

04/19 10:10, , 12F
樓上正解
04/19 10:10, 12F

04/19 10:57, , 13F
了解了 我還在想為何max是25 原來是這樣啊
04/19 10:57, 13F
文章代碼(AID): #1OzP7wJp (Soft_Job)
文章代碼(AID): #1OzP7wJp (Soft_Job)