i 和 i的區別,及其執行緒安全問題

2022-03-21 22:17:22 字數 538 閱讀 8720

i++和++i都是i=i+1的意思,但是過程有些許區別:

i++:先賦值再自加。(例如:i=1;a=1+i++;結果為a=1+1=2,語句執行完後i再進行自加為2)

++i:先自加再賦值。(例如:i=1;a=1+++i;結果為a=1+(1+1)=3,i先自加為2再進行運算)

但是在單獨使用時沒有區別:如for(int i=0;i<10;i++)和for(int i=0;i<10;++i) 沒有區別。

i++和++i的執行緒安全分為兩種情況:

1、如果i是區域性變數(在方法裡定義的),那麼是執行緒安全的。因為區域性變數是執行緒私有的,別的執行緒訪問不到,其實也可以說沒有執行緒安不安全之說,因為別的執行緒對他造不成影響。

2、如果i是全域性變數(類的成員變數),那麼是執行緒不安全的。因為如果是全域性變數的話,同一程序中的不同執行緒都有可能訪問到。

如果有大量執行緒同時執行i++操作,i變數的副本拷貝到每個執行緒的執行緒棧,當同時有兩個執行緒棧以上的執行緒讀取執行緒變數,假如此時是1的話,那麼同時執行i++操作,再寫入到全域性變數,最後兩個執行緒執行完,i會等於3而不會是2,所以,出現不安全性。

i和i 的區別

大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...

i 和 i的區別

當年上c 課的時候對於i 和 i的區別就稀里糊塗。後來沒注意也沒出過什麼問題。但是這個問題還是應該搞清楚。假如有乙個vector,值為 1,2,3,4,5,6,7 用以下程式輸出 i 0 while i 7 i 0 while i 7 cout beforei v i endl cout befor...

i 和 i的區別

很多朋友在學習基礎的時候很容易遇到過這個問題,i和i 到底有什麼區別?下面來詳細解釋一下。首先i 和 i單獨為一條語句時沒有任何區別 例如 int i 1 i 單獨為一條語句 system.out.println i i i 2 int i 1 i 單獨為一條語句 system.out.printl...