#include
#include
enum
;union
;union
;union
;for
(int j =
0; j <10;
++j)})
.detach()
;}else
if(j ==6)
//第6+1輪再開啟乙個讀執行緒讀b})
.detach()
;}t =
gettickcount()
- t;
printf
("同乙個變數 = %dm組/s, *1=%dm/s\n"
, count / t /
1000,1
* count / t /
1000);
} t =
gettickcount()
- t;
printf
("同乙個變數 = %dm組/s, *2=%dm/s\n"
, count / t /
1000,2
* count / t /
1000);
} t =
gettickcount()
- t;
printf
("不同cacheline變數 = %dm組/s, *2=%dm/s\n"
, count / t /
1000,2
* count / t /
1000);
} t =
gettickcount()
- t;
printf
("不同cacheline變數 = %dm組/s, *3=%dm/s\n"
, count / t /
1000,3
* count / t /
1000);
}puts(""
);}
同乙個變數 = 150m組/s, *1=150m/s
同乙個變數 = 75m組/s, *2=150m/s
不同cacheline變數 = 88m組/s, *2=176m/s
不同cacheline變數 = 49m組/s, *3=147m/s
同乙個變數 = 160m組/s, *1=160m/s
同乙個變數 = 77m組/s, *2=155m/s
不同cacheline變數 = 88m組/s, *2=176m/s
不同cacheline變數 = 49m組/s, *3=147m/s
同乙個變數 = 160m組/s, *1=160m/s
同乙個變數 = 77m組/s, *2=155m/s
不同cacheline變數 = 91m組/s, *2=183m/s
不同cacheline變數 = 49m組/s, *3=147m/s
以下開啟執行緒 read a-------------------
同乙個變數 = 121m組/s, *1=121m/s
同乙個變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 71m組/s, *2=142m/s
不同cacheline變數 = 39m組/s, *3=118m/s
同乙個變數 = 128m組/s, *1=128m/s
同乙個變數 = 61m組/s, *2=122m/s
不同cacheline變數 = 71m組/s, *2=142m/s
不同cacheline變數 = 41m組/s, *3=124m/s
同乙個變數 = 121m組/s, *1=121m/s
同乙個變數 = 61m組/s, *2=122m/s
不同cacheline變數 = 73m組/s, *2=146m/s
不同cacheline變數 = 41m組/s, *3=124m/s
以下開啟執行緒 read b-------------------
同乙個變數 = 121m組/s, *1=121m/s
同乙個變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 37m組/s, *3=111m/s
同乙個變數 = 128m組/s, *1=128m/s
同乙個變數 = 62m組/s, *2=125m/s
不同cacheline變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 36m組/s, *3=108m/s
同乙個變數 = 121m組/s, *1=121m/s
同乙個變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 37m組/s, *3=111m/s
同乙個變數 = 121m組/s, *1=121m/s
同乙個變數 = 62m組/s, *2=125m/s
不同cacheline變數 = 64m組/s, *2=128m/s
不同cacheline變數 = 34m組/s, *3=103m/s
此外,此測試程序,開兩份時與乙份幾乎無差異,開三份時數字也有乙份的2/3以上。
多執行緒 x y的原子性
所謂的原子性是指該操作不能再繼續劃分為更小的操作,在多執行緒中原子操作是乙個很重要的概念,決定了該操作是否需要同步機制來進行保護。在x86中,x y包含兩個操作 讀取y至暫存器,然後將該值寫入x,其中讀取y的值至暫存器中是原子的,將值寫入x也是原子的,但是這裡需要格外注意的是兩個原子操作的組合不一定...
執行緒的原子性類的例項
很多人問像atomicinteger類是在哪個方面使用的?public class threaddemo catch interruptedexception e for int j 0 j 100 j start try catch interruptedexception e 大家覺得輸出的是什...
執行緒的原子性與可見性
同步最基本的目的是保證原子性。另乙個容易忽略的目的是可見性,即乙個執行緒修改的共享資料對另乙個執行緒可見。因為一些基本型別的賦值操作本身是原子的。所以針對這些賦值操作在不使用synchronized的情況下,可以使用volatile來解決乙個執行緒的修改對另乙個執行緒的可見。所以volatile是在...