读写者问题?--比较难
TRACE("%d err: %d\n", m_uLocalPort, GetLastError() )打印的错误代码是288
error Lookup的解释为:
企图释放并非呼叫方所拥有的多用户终端运行程序。
读者的代码:
int CUdpSendSocket::WriteData()
{
WSABUF * p;
m_hWriteMutex = OpenMutex( MUTEX_ALL_ACCESS, FALSE, g_lpszWriteMutexName );
m_hReadMutex = OpenMutex( MUTEX_ALL_ACCESS, FALSE, g_lpszReadMutexName );
ASSERT( NULL != m_hWriteMutex );
ASSERT( NULL != m_hReadMutex );
while ( 1 )
{
p = m_pQueue->GetQueueObject(); //return after get an obj
WaitForSingleObject( &m_hReadMapMutex, INFINITE );
if( g_lReadCount == 0 )
{
WaitForSingleObject( &m_hWriteMutex, INFINITE);
}
g_lReadCount++;
ReleaseMutex(m_hReadMutex);
TRACE("%d err: %d\n", m_uLocalPort, GetLastError() );
//send to network
WaitForSingleObject( &m_hReadMutex, INFINITE);
CUtility::g_lReadCount--;
if( g_lReadCount == 0 )
{
ReleaseMutex(m_hWriteMutex);
}
ReleaseMutex(m_hReadMutex);
free(p->buf);
free(p);
}//while (1)
return 0;
}