亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 關(guān)于多線程 [打印本頁]

作者: johnsonshu    時間: 2010-02-03 18:53
標題: 關(guān)于多線程
本帖最后由 johnsonshu 于 2010-02-03 19:16 編輯

今天看到一個代碼,把參數(shù)傳給另一個線程
  1. funcAdmin (){
  2. struct SS  snd;
  3. int intArray1[10] = {....};
  4. int intArray2[10] = {....};
  5. int i;
  6. while (i < 10) {
  7.   snd.a =intArray1[i] ;
  8.   snd.b =intArray2[i] ;
  9.   _beginThread(hThread, funcThread, &snd,NULL);
  10.   i++;
  11. }
  12. }

  13. funcThread (struct SS  *snd){
  14.    int a, b;
  15.    a= snd->a;
  16.    b=snd->b;

  17.    .... doSomething;
  18. }
復(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