好了,讓我們來看看代碼吧。
main Thread:
void SomeFun(void)
{
.......
EnterCriticalSection(&g_csForList); //通過臨界區實現同步(不知這個說法是否正確)
g_pList.push_back(p);
LeaveCriticalSection(&g_csForList);
.......
}
Sub_Thread:
DWord WINAPI Sub_Thread(pvoid pv)
{
for (list<const TCHAR*>::iterator iter = g_pList.begin();
iter != g_pList.end(); iter ++)
{
// do something
}
}
代碼就是這麼點。呵呵
接著就是debug了,發現在sub_Thread中,我始終無法獲取push進去的數據。但在main thread 這個SomeFunc函數可以獲取push到list中的數據,但為什麼在Sub_thread無法獲取,搞了半天,查了一些資料,最後發現原來是這樣的:
在我的主線程的SomeFunc這個函數中,變量p只是一個局部指針變量,對局部指針變量,我們知道出了函數體,它的內容是通常不會是原來寫的數據。這樣,我們可以解釋為什麼在SomeFunc這個函數體內,而到我們的Sub_Thread體內無法獲取數據了。好了,既然找到了問題,那無法就new來處理這個問題了。當我不知道如何在erase 這些節點時同時釋放new出來的內存,請高手指教。
從這裡我們也可以看出,語言基礎是十分重要的。這個問題在林銳的高質量講過,但我這個問題應該是變相的返回一個局部指針變量,在這寫出來有二點希望各位注意:
1、並不是所有的多線程問題和同步或線程之間的配合有關
2、要把語言基礎夯實
歡迎你與我交流,我的QQ:99282122.謝謝!