回答
信號量,鎖,條件變量等是操作系統的概念,通常必須根據操作系統內核的特性來實現。因此,通常不可能孤立地研究它們 - 你也需要考慮內核代碼。或許這樣做的最好方法是在諸如Understanding The Linux Kernel之類的書的幫助下查看Linux內核。
最簡單的信號量只是一個計數器,您可以使用單個原子操作進行加減。維基百科有一個易於理解的解釋,即幾乎涵蓋關於他們的問題:
可以趕上很多IPC(進程間通信)圖書的,可以解釋一下你的來龍去脈需要。有一本經典書。 Unix網絡編程進程間通信Richard Richans。你會得到你需要的一切。 :)
爲了基本瞭解,你可以參考書籍Operating System Concepts,by Avi Silberschatz,Peter Baer Galvin,Greg Gagne,真的很不錯。
您還可以訪問Dave Marshall's網站獲得一些支持。請參閱那裏的信號量部分。
在底層,如果你想實現這樣的事情,你將需要使用匯編語言。 C和C++根本不公開編寫併發代碼所需的那些功能---除了使用在其實現中使用匯編程序的庫。
學習操作系統概念的一個很好的起點可能是Andrew Tanenbaum的「現代操作系統」。他還在另一本關於他自己的操作系統(Minix)的書中被稱爲「操作系統:設計與實現」,該書更詳細地介紹了編碼。你應該能夠在你的本地圖書館找到這些書。
相關主題您可能想查找關於如何以及爲什麼使用信號量的信息:競爭條件,同步,多線程,消費者生產者問題。
Minix的東西是相當不錯的。一個更簡單的例子是MicroC/OS的東西。它帶有一本詳細的教科書,所有的資源都在那裏。它具有基本元素,代碼很小,可以在相對較短的時間內理解它。
http://www.micrium.com/products/rtos/kernel/rtos.html
http://en.wikipedia.org/wiki/MicroC/OS-II
你可以做的另一件事,是在Linux上的應用程序進行僞造出來的操作系統。我通過建立基本剔與itimer,然後用函數調用swapcontext(男子2 swapcontext),這將保存在堆棧的REG左右交換線程這樣做。這會讓你感到醜陋的東西,你只需要實現信號量/互斥/定時器等等。這很有趣。
不管有些職位的說,是不是需要彙編。瞭解它總是會有所幫助。當你編寫高級應用程序時,理解內部/編譯器/等的工作方式絕不會讓人感到痛苦。
有趣的是,Stevens Book是用於描述同步原語及其用法的經典文本之一。他似乎認爲他們可以用來控制進程間通信。我傾向於同意他的觀點。網絡,不,IPC是的。肯定是的。
- 1. 如何使用信號量實現條件變量?
- 2. 實現沒有信號量的鎖
- 3. 無條件鎖定的條件變量上的信號
- 4. 實現信號量
- 5. 實現信號量
- 6. 條件變量與信號量
- 7. 在C++中使用互斥信號和條件變量實現監視器
- 8. 條件變量信號發送
- 9. 條件變量信號問題
- 10. 條件變量死鎖
- 11. 鎖/條件變量問題
- 12. 有條件變量和rwlock死鎖
- 13. Linux信號量:自旋鎖或信號?
- 14. ASP中的信號量和鎖定MVC3
- 15. 信號量和互斥鎖定概念
- 16. Javascript信號量/測試和設置/鎖?
- 17. 條件變量是如何實現的?
- 18. 使用互斥量和信號量實現屏障
- 19. 信號量和互斥量在實現中有什麼區別?
- 20. 發現信號和常量值警告的1位鎖存
- 21. 實現一個隊列的信號量
- 22. 如何實現全局信號量類
- 23. 使用java實現計數信號量
- 24. 如何實現分佈式信號量?
- 25. 在java中實現計數信號量
- 26. 無法理解或實現信號量
- 27. 兩個條件變量,避免死鎖
- 28. 條件變量的讀寫器鎖定
- 29. 打破條件變量死鎖
- 30. MonitorMixin條件變量 - >死鎖
信號量,鎖和條件變量不是進程間通信機制,並且與網絡無關。 – 2009-06-02 08:01:52