3 回答

TA貢獻(xiàn)1712條經(jīng)驗 獲得超3個贊
你參數(shù)是通過指針的方法送進(jìn)去的?然后結(jié)果每個線程要讀數(shù)據(jù)的時候數(shù)據(jù)已經(jīng)不是送入時候的數(shù)據(jù)了嗎
送線程參數(shù)的時候,為每個線程分配一個新的空間來保存這個“參數(shù)”。
例如你原來是
int a = 10;
_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);
a = 20;
_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);
現(xiàn)在要
int a = 10;
int *p = new int;
*p = a;
_beginthreadex(0, 0, ThreadFunc, p, 0, 0);
p = new int;
a = 20;
*p = a;
_beginthreadex(0, 0, ThreadFunc, p, 0, 0);
記住線程函數(shù)退出前要delete掉這個參數(shù)p

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊
這個方法A是否可以做到線程安全?即互不干擾執(zhí)行?
否則加鎖,感覺起不到并發(fā)的作用。
另外,如果這個方法的確無法做到線程安全,建議也只是臨界區(qū)加鎖,即存在沖突的那一段代碼加鎖,否則影響效率。

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
沒聽懂你要怎么輸出,給你創(chuàng)建臨界區(qū)的函數(shù):
CRITICAL_SECTION m_csList;
InitializeCriticalSection(&m_csList);
EnterCriticalSection(&m_csList);
LeaveCriticalSection(&m_csList);
DeleteCriticalSection(&m_csList);
- 3 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報