我在开启多个线程的时候需要操作一全程链表,每个线程从此链表上取下一个元素然后链表头指针后移,该线程就操作此指针的结构进行,那么就需要早操作链表的时候进行互斥,以便其他线程不能进行链表操作,请问如何实现呢?
我曾经试过了用EnterCriticalSection,但是仍然不行,还是会出现丢掉元素的情况
我的操作如下:
CRITICAL_SECTION myCriticalSection; ::InitializeCriticalSection(&myCriticalSection);
这是在程序头进行的初始化以下为线程内:
::EnterCriticalSection(&myCriticalSection);
中间为线程的链表操作
::LeaveCriticalSection(&myCriticalSection);
请问是这样的吗?为什么还是不行呢?还是有其他办法可以实现呢?
我曾经试过了用EnterCriticalSection,但是仍然不行,还是会出现丢掉元素的情况
我的操作如下:
CRITICAL_SECTION myCriticalSection; ::InitializeCriticalSection(&myCriticalSection);
这是在程序头进行的初始化以下为线程内:
::EnterCriticalSection(&myCriticalSection);
中间为线程的链表操作
::LeaveCriticalSection(&myCriticalSection);
请问是这样的吗?为什么还是不行呢?还是有其他办法可以实现呢?
具体函数:
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval
);DWORD WaitForMultipleObjects(
DWORD nCount, // number of handles in array
CONST HANDLE *lpHandles, // object-handle array
BOOL fWaitAll, // wait option
DWORD dwMilliseconds // time-out interval
);
to mfc168:我开的是多个线程,WaitForMultipleObjects我是用于最后线程退出的,那如果我要使用互斥,是采用那个呢?具体如何实现呢?帮忙说清楚一点嘛!
HANDLE m_hmtx = CreateMutex(PSECURITY_ATTRIBUTES psa,
BOOL fInitialOwner,
PCTSTR pszName)
然后利用WaitForSingleObject,
在操作完链表之后,不要忘记调用ReleaseMutex(m_hmtx)就可以了
如果你加上了CriticalSection应该不会出现这个问题,
问题应该出现在别的地方,好好查找一下吧!