boost和std中的thread的引用引數

2022-04-29 13:03:13 字數 787 閱讀 5114

先上**:

1 #include 2 #include 3

4void add(int &i)510

11int

main()

12

結果:

in main, befor add, i: 1

in add, befor ++i, i: 1

in add, after ++i, i: 2

in main, after add, i: 1

可以看到雖然函式形參是引用方式,但執行緒並沒有改變主函式中的變數。

將第15行**改為

15 boost::thread thre(add, boost::ref(i));

後,輸出:

in main, befor add, i: 1

in add, befor ++i, i: 1

in add, after ++i, i: 2

in main, after add, i: 2

可以推測:thread啟動函式時,使用和bind一樣的方式進行引數繫結。雖然形參是引用方式,但是如果不使用ref(),結果依然是值傳遞。

而在c++ std中,前一種呼叫方式會引發編譯錯誤。如果確實有這種需求,可以借助bind函式:

1 #include 2 #include 3

4void add(int &i) 910

11int

main()

12

Android中Service和Thread的區別

rlei 把service等同於thread或process是乙個非常常見的誤解。需要 強調又強調 的第一點是,android的service是乙個context,並不必然等於乙個額外的thread 裡面專門強調 為什麼強調說 longer running 的 component 非常明顯,這裡是和...

C 中的std詳解

與大家分享下,希望可以幫助大家學習c 引例 includeint main 1.std是什麼?std 是個命名空間標示符,c 標準庫中的函式或者物件都是在命名空間std中定義的,所以我們要使用標準函式庫中的函式或物件都要使用std來限定。物件count是標準函式庫所提供的物件,而標準庫在名字空間中被...

C 中的std詳解

與大家分享下,希望可以幫助大家學習c 引例 includeint main 1.std是什麼?std 是個命名空間標示符,c 標準庫中的函式或者物件都是在命名空間std中定義的,所以我們要使用標準函式庫中的函式或物件都要使用std來限定。物件count是標準函式庫所提供的物件,而標準庫在名字空間中被...