亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
關(guān)于多線程
[打印本頁]
作者:
johnsonshu
時間:
2010-02-03 18:53
標題:
關(guān)于多線程
本帖最后由 johnsonshu 于 2010-02-03 19:16 編輯
今天看到一個代碼,把參數(shù)傳給另一個線程
funcAdmin (){
struct SS snd;
int intArray1[10] = {....};
int intArray2[10] = {....};
int i;
while (i < 10) {
snd.a =intArray1[i] ;
snd.b =intArray2[i] ;
_beginThread(hThread, funcThread, &snd,NULL);
i++;
}
}
funcThread (struct SS *snd){
int a, b;
a= snd->a;
b=snd->b;
.... doSomething;
}
復(fù)制代碼
請問一下,這種傳參方式是不是不安全。 (線程剛啟動的一剎那, 主函數(shù)到了下一個循環(huán), 結(jié)果snd.a的值被改了的話, 就違背程序本意了)
另外怎么改合適呢?
作者:
mgjrr16888
時間:
2010-02-03 19:01
#define LOOP 10
struct SS snd[LOOP];
while (i < LOOP)
{
snd[i].a = intArray;
snd[i].b = intArray;
_beginThread(hThread, funcThread, &snd[i], NULL);
i++;
}
行不?
作者:
johnsonshu
時間:
2010-02-03 19:12
本帖最后由 johnsonshu 于 2010-02-03 19:13 編輯
大哥,我可是想一次給thread兩個參數(shù), 所以才用了結(jié)構(gòu)體的
那邊代碼可能寫的太簡單了。 我改了一下
作者:
SuperZ
時間:
2010-02-03 19:47
傳遞給線程的指針參數(shù),指向函數(shù)內(nèi)的臨時變量,funcAdmin退出之后,變量snd就沒有了!
作者:
mgjrr16888
時間:
2010-02-03 20:06
你這個程序就有問題啊。你傳結(jié)構(gòu)地址給線程,你主函數(shù)一退,結(jié)構(gòu)就不存在了。
而且你試圖使用同一個結(jié)構(gòu)讓多個線程公用,這樣也麻煩,除非你使用thread_mutex之類的東西,讓每個線程使用完這個結(jié)構(gòu)
之后再生成下一個線程。
最好用靜態(tài)結(jié)構(gòu)數(shù)組
static struct SS snd[10],
然后從snd[0]-snd[9]循環(huán)賦值,最后傳&snd[i]。
作者:
johnsonshu
時間:
2010-02-03 21:29
主函數(shù)一退,結(jié)構(gòu)就不存在了 ?
結(jié)構(gòu)有可能被覆蓋吧
作者:
mgjrr16888
時間:
2010-02-03 22:06
結(jié)構(gòu)是在funcAdmin的棧上,funcAdmin退出后,其棧上的東西都被彈出,可以認為是不存在了。
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2