因此,谁获取了mutex谁负责调用ReleaseMutex,否则其它进程/线程无法再次拥有它。
CreateMutex后WaitFor.../ReleaseMutex相当于lock/unlock操作。
这个解释核心是,A进程WaitFor到hMutex之后,A就是拥有者,就是owner。B进程WaitFor到hMutex之后,B就是拥有者,就是owner。必须由该owner来ReleaseMutex(hMutex);
任何进程通过CreateMutex(NULL,0,“ReadWrite11”)都可以WaitFor并ReleaseMutex,不限于创建进程。
创建进程如果CreateMutex如果第2个参数是true,那么就是默认的当前的拥有者,就是owner。否则该锁对任何进程是开放的,就是任何进程都可以Waitfor成为有者,就是owner。
举个生活中的例子。releasemutex某班A同学买了一把锁用于锁书橱,这把锁只有一个钥匙。他可以立即锁上(CreateMutex如果第2个参数是true),成为当时的owner(钥匙保管人)。也可以不立即锁上(CreateMutex如果第2个参数是false),把锁和钥匙放在教室里,任何人需要就可以使用。
此后,谁锁上,钥匙就在谁手上,成为owner,必须由此人开锁(Release),交出钥匙,其它人才可以再锁上,并成为owner。
例子举得很到位,不过还有点问题请指教一下。
就是说第一个waitfor的为owner,那么如果owner不释放的话,那么其他waitfor的进程装会永远处于等待状态是吧?
------解决方案--------------------
引用:Quote: 引用:
Quote: 引用:
同名的mutex最多只允许一个thread获取owner。所有不管多少进程或线程在等待同一个mutex,只有一个允许运行。
按你的例子:一个进程(假设主进程)CreateMutex(NULL,TRUE,“ReadWrite11”)成功,GetLastError==0,那么返回的handle已经被这个进程拥有了,其它进程(不管多少,假设是子进程)同样CreateMutex(NULL,TRUE,“ReadWrite11”),如果成功返回了handle,并且GetLastError==ERROR_ALREADY_EXISTS,这个进程并不拥有这个mutex,但是你可以用wait系列函数等待拥有者释放它。此时主进程调用ReleaseMutex释放拥有权,等待的某个进程可以获取这个mutex,如果主进程又一次希望拥有这个mutex,那么主进程可以用wait系列函数等待拥有这个mutex的子进程调用ReleaseMutex。
因此,谁获取了mutex谁负责调用ReleaseMutex,否则其它进程/线程无法再次拥有它。
CreateMutex后WaitFor.../ReleaseMutex相当于lock/unlock操作。 c_a_3();
这个解释核心是,A进程WaitFor到hMutex之后,A就是拥有者,就是owner。B进程WaitFor到hMutex之后,B就是拥有者,就是owner。必须由该owner来ReleaseMutex(hMutex);
任何进程通过CreateMutex(NULL,0,“ReadWrite11”)都可以WaitFor并ReleaseMutex,不限于创建进程。
创建进程如果CreateMutex如果第2个参数是true,那么就是默认的当前的拥有者,就是owner。releasemutex否则该锁对任何进程是开放的,就是任何进程都可以Waitfor成为有者,就是owner。
举个生活中的例子。某班A同学买了一把锁用于锁书橱,这把锁只有一个钥匙。他可以立即锁上(CreateMutex如果第2个参数是true),成为当时的owner(钥匙保管人)。也可以不立即锁上(CreateMutex如果第2个参数是false),把锁和钥匙放在教室里,任何人需要就可以使用。
此后,谁锁上,钥匙就在谁手上,成为owner,必须由此人开锁(Release),交出钥匙,其它人才可以再锁上,并成为owner。
例子举得很到位,不过还有点问题请指教一下。
就是说第一个waitfor的为owner,那么如果owner不释放的话,那么其他waitfor的进程装会永远处于等待状态是吧?
如果owner所程结束,这个mutex会自动释放。除此之外除非拥有的线程调用ReleaseMutex,否则其它线程必须等待,waitfor...不会返回
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-24256-3.html
加油加油
强烈建议大家更新后抹除所有数据