C 多執行緒 引數傳遞

2021-10-24 12:48:05 字數 1453 閱讀 8224

引用傳遞,指標傳遞的注意事項:因為執行緒2裡使用的是執行緒1的變數a,所以如果執行緒1比執行緒2提前結束了,結束的同時就會釋放變數a的記憶體空間,可是這時執行緒2還沒結束,再去訪問執行緒1中的變數a的話,就會發生意想不到的錯誤!!!

2,引用傳遞,例子:

#include

#include

#include

#include

using

namespace std;

voidf2(

int& i)

voidf1(

int& i)

intmain()

執行結果:

f1:10

f2:0

執行結果分析:

列印出【f1:10】的原因可能是,①處分離執行緒後,main函式所在的執行緒還沒有結束,所以i還沒有被釋放掉,所以能列印出10;還有可能是main函式所在的執行緒雖然已經結束了,但是巧合的是值還是10。

列印出【f2:0】的原因是,②處分離執行緒後,執行緒f1已經結束了,所以函式f1裡的j已經被釋放了,這時執行緒f2再訪問j的時候就是0了。

3,指標傳遞,例子:

#include

#include

#include

#include

using

namespace std;

voidf2(

int* i)

voidf1(

int& i)

intmain()

執行結果:

f1:10

f2:0

執行結果分析:

列印出【f1:10】的原因可能是,①處分離執行緒後,main函式所在的執行緒還沒有結束,所以i還沒有被釋放掉,所以能列印出10;還有可能是main函式所在的執行緒雖然已經結束了,但是巧合的是值還是10。

列印出【f2:0】的原因是,②處分離執行緒後,執行緒f1已經結束了,所以函式f1裡的j已經被釋放了,這時執行緒f2再訪問j的時候就是0了。

4,unique_ptr作為引數傳遞,必須使用move函式

#include

#include

#include

#include

using

namespace std;

void

f1(unique_ptr<

int> upt)

intmain()

5,函式的指標作為引數傳遞

#include

#include

#include

#include

using

namespace std;

class

test};

intmain()

C 多執行緒引數傳遞

在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedthreadstart p...

C 多執行緒引數傳遞

c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...

C 多執行緒引數傳遞

c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...