c*****z 发帖数: 182 | 1 刚看了书上说win32里的mutex用了reference counting,如果没有线程引用它的话就自
动销毁。很困惑:假设线程A调用createmutex生成了个mutex,然后该线程没用它就退
出了。线程B想通过openmutex打开A产生的mutex,那如果A先退出了,此时是不是mutex
就被销毁了,B打不开了那? |
x****u 发帖数: 44466 | 2 你的理解有问题,kernel对象哪有能自动销毁的。你看的什么书?
mutex
【在 c*****z 的大作中提到】 : 刚看了书上说win32里的mutex用了reference counting,如果没有线程引用它的话就自 : 动销毁。很困惑:假设线程A调用createmutex生成了个mutex,然后该线程没用它就退 : 出了。线程B想通过openmutex打开A产生的mutex,那如果A先退出了,此时是不是mutex : 就被销毁了,B打不开了那?
|
c*****z 发帖数: 182 | 3 那如果线程A生成了一个mutex,然后线程结束了,之后也再没线程用这个mutex,那它
什么时候被销毁那
【在 x****u 的大作中提到】 : 你的理解有问题,kernel对象哪有能自动销毁的。你看的什么书? : : mutex
|
c*****z 发帖数: 182 | 4 就是最新的那本阿,modern multithreading implmenting, testing and debugging
【在 x****u 的大作中提到】 : 你的理解有问题,kernel对象哪有能自动销毁的。你看的什么书? : : mutex
|
x****u 发帖数: 44466 | 5 一直活到进程结束为止。
【在 c*****z 的大作中提到】 : 那如果线程A生成了一个mutex,然后线程结束了,之后也再没线程用这个mutex,那它 : 什么时候被销毁那
|
x****u 发帖数: 44466 | 6 哦,原文呢?
【在 c*****z 的大作中提到】 : 就是最新的那本阿,modern multithreading implmenting, testing and debugging
|
p***o 发帖数: 1252 | 7 这种Win32的东西,找本Windows高级编程指南或者Windows核心编程看看就明白了。
新书也就抄抄老书,还不一定有老书写的清楚。
【在 c*****z 的大作中提到】 : 就是最新的那本阿,modern multithreading implmenting, testing and debugging
|
c*****z 发帖数: 182 | 8 我好像说错了,A和B都是进程如何那,mutex不是可以跨进程的吗,是如果A进程创了,
B还没来得及调用,A进程就结束了,B进程就没法open了吧
【在 x****u 的大作中提到】 : 一直活到进程结束为止。
|
b******n 发帖数: 592 | 9 kernel level mutex has to be removed explicitly. is that what you talking
about?
【在 c*****z 的大作中提到】 : 我好像说错了,A和B都是进程如何那,mutex不是可以跨进程的吗,是如果A进程创了, : B还没来得及调用,A进程就结束了,B进程就没法open了吧
|
x****u 发帖数: 44466 | 10 确实,这么多年win api也没出过什么新东西了。user32部分的实现在xp下和vista下改
动倒是不小,函数还在,但是效果有区别。
【在 p***o 的大作中提到】 : 这种Win32的东西,找本Windows高级编程指南或者Windows核心编程看看就明白了。 : 新书也就抄抄老书,还不一定有老书写的清楚。
|
x****u 发帖数: 44466 | 11 对,这个是内核对象的引用计数了。这时候这个对象引用数为0,就被自动释放了。建
议用process exploer看看,印象中里面能看到句柄数和名称的。
【在 c*****z 的大作中提到】 : 我好像说错了,A和B都是进程如何那,mutex不是可以跨进程的吗,是如果A进程创了, : B还没来得及调用,A进程就结束了,B进程就没法open了吧
|
x****u 发帖数: 44466 | 12 他说的应该是用户态的锁。
【在 b******n 的大作中提到】 : kernel level mutex has to be removed explicitly. is that what you talking : about?
|
p***o 发帖数: 1252 | 13 你的需求是啥?没法open自然能检测出来:
OpenMutex
Return Value
...
If a named mutex does not exist, the function fails and GetLastError returns
ERROR_FILE_NOT_FOUND.
还有这一段:
If your multi-threaded application must repeatedly create, open, and close
a named mutex object, a race condition can occur. In this situation, it is b
etter to use CreateMutex instead of OpenMutex, because CreateMutex opens a m
utex if it exists and creates it if it does not.
【在 c*****z 的大作中提到】 : 我好像说错了,A和B都是进程如何那,mutex不是可以跨进程的吗,是如果A进程创了, : B还没来得及调用,A进程就结束了,B进程就没法open了吧
|