2012-01-19 29 views
10

Aslında iddiaları iki şekilde de duydum. Öyle olmadıklarından şüpheleniyorum ama konuyu ele almak istedim.C++ işaretçi atama atomik midir?

+2

Ayrıca bkz http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth

+1

C++ '' atomik gerekli olmazdı :) –

cevap

14

C++ 03 ipliklerin varlığından haberdar değildir, bu nedenle atomiklik kavramı C++ 03 için pek anlamlı değildir, yani bunun hakkında bir şey söylemez.

C++ 11 iş parçacıkları hakkında bilgi sahibi olur, ancak bir kez daha atama işaretçilerinin atomikliği hakkında bir şey söylemez. Ancak C++ 11, atomik olması garantili std::atomic<T*> içerir.

İşlenmemiş bir işaretçiye yazma işleminin platformunuzda atomik olsa bile, derleyicinin hala bu cümleyi hareket ettirmek için serbest olduğunu unutmayın, bu da size hiçbir şey satın almaz.

Eğer parçacıkları arasında paylaşılan bir işaretçi yazmak gerekirse

ya std::atomic<T*> (veya henüz resmi değil boost::atomic<T*>, atomik intrinsics veya pencereleri Interlocked * GCC'lerde) kullanan veya tüm muteksler bu pointer için erişir sarın. Eğer durum böyle ise

+0

Burada boost.atomic alabilirsiniz: http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html –

2

C++ normu, belirli bir iş parçacığı davranışı tanımlamaz. Derleyici ve platforma bağlı olarak, işaretçi atama atomik olabilir veya olmayabilir.

+8

C++ 11 * bir iş parçacığı davranışı ve ilişkili bellek modelini tanımlar. –

+1

@Frizlab ve J.N. İkiniz de haklısınız. Porsche bir spor araba olduğunu söyleyerek, doğru ama kesin değil, her model bir spor araba olduğu gibi :) – mloskot