这个猜想我以信号量 Semaphore 为例
假设进程A创建了一个信号量,命名为 Test
那么进程B可以在之后用OpenSemaphore获得对这个内核对象的Handle
那么我请问,这个时候实际上对这个信号量的引用计数是多少?是1还是2?如果是2,那么我在A进程中使用CloseHandle关闭对这个semaphore的引用(或者直接退出进程)
那这个信号量会被摧毁吗?我认为是不会的,因为我觉得B还在引用它。
如果我以上的推论是正确的,那么就有这样一个问题:
我启动A进程,我创建一个信号量。
然后退出A进程。
我再启动A进程,我会不清楚这个信号量是否依然存在,如果在我上一步退出之前有其他任意的进程Open了这个内核对象,就会导致我现在无法创建。
是这样的吗?
假设进程A创建了一个信号量,命名为 Test
那么进程B可以在之后用OpenSemaphore获得对这个内核对象的Handle
那么我请问,这个时候实际上对这个信号量的引用计数是多少?是1还是2?如果是2,那么我在A进程中使用CloseHandle关闭对这个semaphore的引用(或者直接退出进程)
那这个信号量会被摧毁吗?我认为是不会的,因为我觉得B还在引用它。
如果我以上的推论是正确的,那么就有这样一个问题:
我启动A进程,我创建一个信号量。
然后退出A进程。
我再启动A进程,我会不清楚这个信号量是否依然存在,如果在我上一步退出之前有其他任意的进程Open了这个内核对象,就会导致我现在无法创建。
是这样的吗?
解决方案 »
- 鼠标滚轮事件
- 数据库表
- 关于安装MSDN问题
- 终于买到windows程序设计了
- 请问对话框中怎样输入汉字 ?
- 如何识别WORD文档是采用的ASCII编码还采用Unicode编码?
- 燃眉之急,在北京的哪位大虾,谁有空看看这个帖子,搞定的话请吃饭,谢谢!!!!
- 。NET中WIN32控制台程序如何使结果显示停下来?
- 关于指针问题?
- 请大家讨论COM(COM+,DCOM);CORBA;EJB三种组件标准各自的特点及适合的应用领域。
- MFC 如何屏蔽系统热键 WIN ATL+TAB CTRL+ALT+DELETE
- 第一次写文章,大家支持下~~详细介绍—获取ACCESS数据库中所有的表名(ODBC + MFC实现)
那这个信号量会被摧毁吗?我认为是不会的,因为我觉得B还在引用它。
--------------
不会,只要引用计数不为0,这个内核对象就不会销毁
我再启动A进程,我会不清楚这个信号量是否依然存在,如果在我上一步退出之前有其他任意的进程Open了这个内核对象,就会导致我现在无法创建。
------------------
再次Create效果跟Open一样,返回一个已经存在的内核对象的句柄,这时候调用GertLastError会返回一个表示已存在的错误码(好像叫什么XXX_ALREADY_EXIST)具体资料参考windows核心编程