c – 如何等到互斥锁解锁?
有一系列互斥体.
我的功能: >检查是互斥锁被锁定 2A.如果没有,那么锁定它 2B.如果已锁定,请等待解锁并将其锁定 另一个功能解锁它. 问题是我在等待部分遇到了崩溃: HANDLE mutexes[N]; void func(int i) { // (*) wait until unlocked or create if unlocked while ((mutexes[i] = CreateMutex(NULL,TRUE/*same with FALSE*/,NULL)) != NULL); /*or WaitForSingleObject(mutexes[i],INFINITE)*/ mutexes[i] = CreateMutex(NULL,TRUE,NULL); } 在(*)点,我遇到了崩溃 – 访问冲突.当它试图创建之前已经创建的互斥锁[i]时发生崩溃.我不能使用WaitForSingleObject,因为第一次没有创建互斥锁[i],文档说WaitForSingleObject未定义.此外,如果我使用此功能,我会得到同样的崩溃. 我只需要这种简单伪代码的模拟 if (mutex_has_been_created[mutexes[i]]) WaitUntilRelease() CreateMutex(); 我试图将它包装在一个关键部分并获得相同的结果.我确信我在正确的范围内. 我知道我的问题很简单,但我找不到解决方案.在所有示例中,我都看到在WaitForSingleObject之前创建了一个互斥锁,这对我来说不起作用. 谢谢. 解决方法
你真的需要理清代码的逻辑:互斥体的创建和锁定/解锁是不同的操作,应该这样对待.坦率地说,所有这些“尝试创建已经创建的互斥体”的业务并没有多大意义.
简述: > 您可以创建/销毁互斥锁??一次,并在锁定/解锁之间任意多次. 当您尝试锁定已被其他人锁定的互斥锁时,您的线程会自动阻塞,直到互斥锁变为可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |