回答
信号量,锁,条件变量等是操作系统的概念,通常必须根据操作系统内核的特性来实现。因此,通常不可能孤立地研究它们 - 你也需要考虑内核代码。或许这样做的最好方法是在诸如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