让我说我打电话
h=CreateMutex(NULL,FALSE,"full");
y=WaitForSingleObject(h,INFINITE);
//Read from a queue (critical section)
ReleaseMutex(h);
可能会出现什么问题导致读取位置的访问权限?
例如,多个线程可以同时进入该关键部分吗?
答案 0 :(得分:1)
虽然您将这些函数的结果存储在变量中,但您不会读取它们以确定函数是否成功。也许您没有创建或打开给定的互斥锁,因此h
为0.或者可能不是获取互斥锁的所有权,而是等待失败。在任何一种情况下,都应该调用GetLastError
来找出原因,然后不要执行受保护的代码部分。
互斥锁可能被放弃。这意味着之前拥有互斥锁的线程在释放互斥锁的所有权之前就已终止。 (只有一个互斥体可以被放弃;关键部分和信号量没有互斥对象那样的线程关联。)如果发生这种情况,你仍然会被授予互斥锁的所有权,但是你不能真正相信它的有效性。互斥锁应该保护的数据,因为前一个所有者可能在终止之前没有将事物保持在稳定状态。
如果正确调用函数并检查错误,则多个线程无法同时进入临界区。这就是同步对象的全部目的。