阿里2014校招筆試題(南大)——利用thread和sleep產生字串的偽隨機序列

來源:互聯網
上載者:User

引言:

除了第一字元(下標0)以外,為其餘N-1個字元各建立一個線程,每個線程先sleep一秒(也可以更長),再將對應位置的字元和第一個字元交換;N-1個線程完成後,主線程結束。原理暗藏在題目中,sleep一秒後,因為sleep的不準確性,這N-1個線程幾乎同時醒來(就緒)(試想如若sleep非常精確,各個線程醒來的順序就會和建立順序相同);又由於線程調度的隨機性,這時會被執行的線程是隨機的,(不知先後順序地)執行N-1次之前所述的交換所得的便是一個偽隨機序列。不過當時想不起來pthread_create幾個參數的順序了(前面題的計算量不小,頭都搞暈了),就隨便按個順序寫了。回來後,按照當時的思路很快在電腦上寫了出來:

等待其他線程只是為了寫起來簡單,並不嚴謹!




需要稍加留意的是:count也是臨界資源,需要放到臨界區裡(和str[0]一樣);另外pthread_cond_wait介面所需的不能用維護“其他線程”臨界的那個mutex,應該再定義一個mutex。因為pthread_cond_wait會原子性地阻塞當前線程同時unlock傳入的mutex,pthread_cond_wait返回時,傳入的mutex再次被鎖。(APUEcn2e p309)
註:本機環境gcc 4.6.1(MinGW)  


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.