亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的想法是不是要在方法開始加鎖,方法最后解鎖,才不會起沖突,那位慕友幫我解決下!

我的想法是不是要在方法開始加鎖,方法最后解鎖,才不會起沖突,那位慕友幫我解決下!

C++
慕哥6287543 2023-03-03 14:10:05
問題是這樣的:有一個方法A(int a)經過方法處理a 后,輸出一個值b,我要啟動兩個線程都去執行它,但是輸出的結果比較亂,理想結果應該是 線程1+參數a1得到結果b1,線程2+參數a2得到結果b2,實際的結果是兩個線程都輸出b2,或a2等等。
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

你參數是通過指針的方法送進去的?然后結果每個線程要讀數據的時候數據已經不是送入時候的數據了嗎
送線程參數的時候,為每個線程分配一個新的空間來保存這個“參數”。
例如你原來是
int a = 10;
_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);
a = 20;
_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);
現在要
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);

記住線程函數退出前要delete掉這個參數p

 


查看完整回答
反對 回復 2023-03-06
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

這個方法A是否可以做到線程安全?即互不干擾執行?

否則加鎖,感覺起不到并發的作用。

另外,如果這個方法的確無法做到線程安全,建議也只是臨界區加鎖,即存在沖突的那一段代碼加鎖,否則影響效率。

查看完整回答
反對 回復 2023-03-06
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

沒聽懂你要怎么輸出,給你創建臨界區的函數:
CRITICAL_SECTION m_csList;
InitializeCriticalSection(&m_csList);
EnterCriticalSection(&m_csList);
LeaveCriticalSection(&m_csList);
DeleteCriticalSection(&m_csList);

查看完整回答
反對 回復 2023-03-06
  • 3 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號