2014-10-02 31 views
0

我有一個struct,它由在兩個動態鏈接庫(或共享對象)之間共享的普通舊數據組成。 (用C++ 11編譯)。較低級別的std :: atomic <unsigned int>

其中一個數據成員必須是原子類型,或者更確切地說,我需要能夠自動應用前綴++--

我擔心會員使用std::atomic<unsigned int>,因爲我認爲這會將兩個庫綁定到使用相同的STL實現。

所以我寧願使用std::uint32_t作爲成員,並將原子操作應用於庫中的該成員。只有我無法弄清楚如何做到這一點,除了使用互斥會降低性能到不可接受的程度。

總之我怎麼可以這樣做可以使用通過標準C++ 11功能

std::int32_t foo; 
atomic_increment(foo); 

+3

你的問題是如何解決某些問題,當你不能依賴C++標準,並且你想要一個C++標準的答案。這沒有意義。 – 2014-10-02 11:29:08

+0

爲什麼不使用std :: atomic在共享庫中實現它,並導出一個stl-independant接口? – galinette 2014-10-02 11:35:07

回答

1

你不行。標準C++不尊重不同共享庫中不同庫實現的想法(因爲它沒有後者的概念),因此不認爲你的情況存在。因此,沒有設施可以支持它。

實際上,只是使用std::atomic - 實際上支持原子的平臺上的任何體面的編譯器/庫應該不會在機器代碼中留下任何痕跡。

相關問題