至此,我們已經用 C 實作了作業系統中的 Thread 與 Deadlock 這兩種慨念,但事實上、這兩個概念之間是有關係的,要理解 Thread 與死結之間的關係,就必須從 Race Condition (競爭情況) 這個問題談起。
在多 Thread (或多 CPU) 的情況之下,兩個 thread 可以共用某些變數,但是共用變數可能造成一個嚴重的問題,那就是當兩個 thread…
Thread 在台灣被稱為『執行緒』,但是在中國被稱為『線程』,作業系統教科書中通常會定義 Process 為:執行中的程式。因此假如您開了一個 Word 檔案,那就是有一個 Word 行程在執行,如果您又開了個命令列,那就是又有一個命令列行程在執行,如果又開第二個命令列,那就有兩個命令列行程在執行。
在上一篇 『gcc 工具的使用』 文章中,我們曾經使用下列指令將 C 語言轉換成組合語言
$ git clone https://github.com/ProgrammerMag/pmag.git$ cd pmag/$ cd 201807-casm/02-link/$ gcc -S main.c -o main.s$ gcc -S sum.c -o sum.s
$ cd
$ gcc -S main.c -o main.s$ gcc -S sum.c -o sum.s
在作業系統的課程當中我們會學到『死結』這個問題,當程式 1 抓住資源 A,卻又在等程式 2 釋放資源 B,而程式 2 則抓住資源 B ,卻又在等程式 1 釋放資源 A 的時候,就會進入死結狀態。這就像兩台很長的火車,互相卡住對方一般,下圖顯示了死結情況的示意圖。
gcc 是 Linux 上預設的 c 語言編譯器,善用 gcc 可以幫助我們理解 C 語言的底層世界
在本文中,我們會將程式放在 github 中,您可以用下列指令『克隆』本雜誌的專案 https://github.com/ProgrammerMag/pmag/,然後開始在命令列shell裏進行操作!
$ git clone https://github.com/ProgrammerMag/pmag.git
本期焦點 — Thread 、競爭情況、死結的C 語言實作
要解決以上的競爭情況,必須採用一些協調 (Cooperation) 方法,Pthread 當中所提供的主要協調方法是 mutex ,其方法是在共用變數的臨界區間前後上鎖與解鎖,如以下範例所示。
本期焦點 — C語言的底層世界
人工智慧中的深度學習,其實就是新一代的神經網路,其《學習方法》仍然是以《梯度下降法》為主,但是對於《多層的神經網路》而言,梯度的計算必須依賴《反傳遞算法》。
這個觀念在 Andrej Karpathy blog 中的 Hacker’s guide to Neural Networks 文章中有清楚的說明,該文網址如下:
在最近興起的深度學習領域,有兩個最重要的神經網路,幾乎主導了 90% 的應用,其中卷積神經網路 CNN 通常用來辨識影像,而循環神經網路 RNN 通常用來處理《語言文字》。
循環神經網路 RNN 目前有三種主要的模型,分別是 Simple RNN, LSTM, GRU,其中 Simple RNN 太簡單,效果不夠好,記不住長期的事情。所以才會發展出《長短期記憶網路 LSTM》,然後 LSTM 又被簡化為 《閘式循環網路 GRU》…
最近人工智慧交談程式與深度偽裝技術都有長足的進展,特別是 Google IO 2018 展示的那款可以《向理髮師預約時間》的《交談機器人》,可以很順暢的進行交談並且臨機應變。影片如下:
讓我們看看一個《人工生物》學習走路的《兩分鐘論文》影片,影片中的生物是以小棒子組成的,該論文的技術可以讓這些生物學會如何行走。
首先請大家先看這個《深度偽裝》 (Deep Fake) 技術的新進展,這個技術可以聽到任何人說話的聲音,都可以把他套用在另一個人的臉部表情上,例如我可以借《歐巴馬或川普》的嘴來講出我想說的話 ….