陳碩老師的《Linux多執行緒服務端程式設計》中的乙個疑問?

時間 2021-05-31 19:07:56

1樓:jack huang

看了這麼多答案我說說我的理解吧。

題主應該是覺得陳碩這本書是高階上檔次的書,怎麼可能會用這麼簡單的例子呢?於是害怕是自己有不理解的地方,便上來發問。

結果真的就是乙個很簡單的問題,背後並無高大上的原因。

2樓:wjhbb

個人理解,提問者的問題應該是,他/她不明白為什麼會有人會把 running = true 放到 t.start() 後面,也就是說,他/她認為這個例子舉得不自然、太牽強。 是這麼理解吧?

但其實這個例子並非不自然。或者說,running = true 放在 t.start() 之前或之後都是自然的,因為這兩個語句要表達的,無非是「啟動乙個執行緒,並設定全域性標誌位來標記執行緒已經啟動」,無論哪個在前表達的都是這個意思。

而書裡說的是——雖然兩種寫法都自然——其中一種寫法不安全。

這事也說明,很多情況下阻礙學習的不是那些很複雜高深的東西,而是一些很簡單直白、但需要讀者進入乙個特定場景才能理解的東西。

3樓:青盲

猜測這位同學可能缺乏基本的執行緒排程方面的了解,補充一下這方面的知識,應該就能理解那段話的意思。

ps:@陳碩的回答方式本身沒有問題,明白人都懂的,但是可能還是解決不了提問者的疑問(儘管按理不應該有這種疑問);但還是覺得作為書的作者,況且又花了時間回答,不防解釋一下執行緒排程的原因導致那種現象。

4樓:

pthread_create呼叫到執行緒完全啟動之間有時間差,常常大於賦值操作。但不能忽視時間差小於賦值操作的情況,因此為了保證執行緒正確進入,賦值應該放在pthread_creat呼叫前。

雖然賦值應該放在呼叫前,但我接觸到很多人就喜歡放在後面,他們大概僅僅理解成一次flag設定,做某個事情然後立個flag想想也能說得通。

Linux 開發,使用多執行緒還是用 IO 復用 select epoll?

Chengbb 比較成熟的做法是IO復用 thread pool,這種框架效能好,可擴充套件性強,目前很多網路庫都採用了這種模式 nginx採用了IO復用 多程序模式 楊凱 根據需要,如果單個處理不很費cpu,沒有堵的東西,那麼epoll這種通知性的方式最適合你,你甚至可以就跑乙個單執行緒,然後把需...

C 多執行緒中,執行緒類的成員變數屬於哪個執行緒?

XZiar 先搞清執行緒和程序的關係唄。程序是系統管理資源的最小單位,執行緒是系統排程 CPU上執行的最小單位。所以什麼記憶體空間 變數之類的資源,本來就是 不屬於某個執行緒 的,自然可以隨意訪問。每個執行緒有自己的呼叫棧,但這實質上還是開闢執行緒時申請的一塊記憶體,關鍵是在於棧指標 放在暫存器裡 ...

word2vec多執行緒優化時不加鎖的做法合理麼?

田晗 反正只要跑到乙個大概的終點就可以了,一群人是一擁而上來的快,還是前後怕磕著碰著來的快呢?反正evaluation說話,數學上的嚴格,機器學習家都是糊弄糊弄能說得過去就行。 T mac 答 十分合理 原因 1.高效是word2vec 的乙個特色,如果加鎖的話,效率必然降低。2.加鎖之後雖然能從理...