Giriş
std::thread_local sadece std::thread ile beraber kullanılabilir.
Tanımlama
Thread local değişkenler thread_local storage class specifier ile kullanılır.
thread_local global olmayan değişkenlerde kullanılamaz. Aşağıdaki kod derlenmez.
thread_local yerine gcc __thread tipini sunuyordu. __thread biraz daha hızlı çalışıyor. Açıklaması şöyle.
std::thread_local sadece std::thread ile beraber kullanılabilir.
Tanımlama
Thread local değişkenler thread_local storage class specifier ile kullanılır.
thread_local int tls = 0;
var++;
Bu tanımlama farkı dışında aynı bir int gibi kullanılabilir.tls += 37;
tls &= 11;
tls ^= 3;
extern bile yapılabilir.// 3.cpp
extern thread_local int tls;
...
...
// 4.cpp
thread_local int tls = 42;
Sınıf İçinde Tanımlamathread_local global olmayan değişkenlerde kullanılamaz. Aşağıdaki kod derlenmez.
class Foo {
public:
int bar(Args args) {
...
baz.xxx();
}
private:
thread_local Baz baz;
};
C++11'den Öncethread_local yerine gcc __thread tipini sunuyordu. __thread biraz daha hızlı çalışıyor. Açıklaması şöyle.
Ama tabi portable kod daha önemli.G++ now implements the C++11 thread_local keyword; this differs from the GNU __thread keyword primarily in that it allows dynamic initialization and destruction semantics. Unfortunately, this support requires a run-time penalty for references to non-function-local thread_local variables even if they don't need dynamic initialization, so users may want to continue to use __thread for TLS variables with static initialization semantics.
Hiç yorum yok:
Yorum Gönder