C++ Standart Kitaplığında İş Parçacığı Güvenliği
Aşağıdaki iş parçacığı güvenliği kuralları, aşağıda açıklandığı gibi C++ Standart Kitaplığı'ndaki shared_ptr
tüm sınıflar için geçerlidir. Daha güçlü garantiler bazen sağlanır; örneğin, aşağıda açıklandığı gibi standart iostream nesneleri ve içindekiler <atomic>
gibi çok iş parçacığı kullanımına yönelik türler.
Nesne, birden çok iş parçacığından okuma için iş parçacığı açısından güvenlidir. Örneğin, A nesnesi verildiğinde, A'yı iş parçacığı 1'den ve iş parçacığı 2'den aynı anda okumak güvenlidir.
Bir nesneye bir iş parçacığı tarafından yazılıyorsa, aynı veya diğer iş parçacıklarındaki tüm okuma ve yazma işlemleri korunmalıdır. Örneğin, A nesnesi verildiğinde, 1. iş parçacığı A'ya yazıyorsa, 2. iş parçacığının A'dan okuması veya A'ya yazması engellenmelidir.
Başka bir iş parçacığı aynı türde farklı bir örneği okuyor veya yazıyor olsa bile, bir türün bir örneğini okumak ve yazmak güvenlidir. Örneğin, aynı türdeki A ve B nesneleri verildiğinde, A iş parçacığı 1'de yazılırken ve B iş parçacığı 2'de okunurken güvenlidir.
shared_ptr
Birden çok iş parçacığı, sahipliği paylaşan kopyalar olsa bile farklı shared_ptr
nesneleri aynı anda okuyabilir ve yazabilir.
iostream
Standart iostream nesneleri , , , , , wcin
, , wcout
, ve wclog
wcerr
diğer sınıflarla aynı kuralları izler; bu özel durumla birlikte: birden çok iş parçacığından bir nesneye yazmak güvenlidir. clog
cerr
cout
cin
Örneğin, iş parçacığı 1, iş parçacığı 2 ile aynı anda öğesine cout
yazabilir. Ancak bu, iki iş parçacığından gelen çıkışın birbirine karışmasına neden olabilir.
Not
Akış arabelleğinden okuma, okuma işlemi olarak kabul edilmez. Bunun yerine, sınıfın durumu değiştirildiğinden yazma işlemi olarak kabul edilir.