對于同步颂郎,c++11添加了幾個(gè)原子類型容为,類型如下atomic_xxx(atomic_int等),對于一般的線程之間的同步替劈,只需要使用它們即可得滤。
對于內(nèi)存模型,如果是采用了弱順序的內(nèi)存模型懂更,則在多個(gè)原子類型的操作順序進(jìn)行了重排急膀,例如:
atomic_int x;
atomic_int y;
x = 1;
y=2;
上面的對x,y進(jìn)行的賦值順序可能是:y=2;x=1;
在c++11中龄捡,原子類型的成員函數(shù)總是保證順序的一致性,這樣聘殖,既禁止了編譯器對原子類型變量間的重排序優(yōu)化;但是對于像PowerPC這樣的平臺來說,不僅禁止了編譯器的優(yōu)化餐禁,還插入了大量的內(nèi)存柵欄(對多線程而言突照,有很大的性能傷害)帮非。
對于atomic_int的操作可以是(load取),(store存)。
內(nèi)存順序由6種:
? ? memory_order_relaxed ?不對順序做任何保障诺核。
? ? memory_order_acquire ?在本線程中,后續(xù)的讀操作必須在本操作結(jié)束后執(zhí)行豁翎。
? ? memory_order_release ? 所有之前的寫操作完成之后才能進(jìn)行本操作。
? ? memory_order_acq_rel? ? 同時(shí)包含memory_order_acquire和memory_order_release邦尊。
? ? memory_order_consume ?本線程中优烧,所有的后續(xù)有關(guān)本原子類型的操作,必須在本條原子操作完成之后執(zhí)行畦娄。
? ? memory_order_seq_cst ? ? 全部存取都按順序執(zhí)行。