Düşük düzeyli atomik işlemler. Bunlar aslında donanımda uygulanan mutekslerdir, sadece atomik olarak çok az işlem gerçekleştirebilirsiniz.
aşağıdaki eşdeğer pseudocode göz önünde bulundurun:
mutex global_mutex;
void InterlockedAdd(int& dest, int value) {
scoped_lock lock(mutex);
dest += value;
}
int InterlockedRead(int& src) {
scoped_lock lock(mutex);
return src;
}
void InterlockedWrite(int& dest, int value) {
scoped_lock lock(mutex);
dest = value;
}
Bu işlevler CPU tarafından talimat olarak uygulanır, ve çeşitli derecelerde parçacıkları arasında tutarlılığı sağlamak. Kesin anlambilim söz konusu CPU'ya bağlıdır. x86 sıralı tutarlılık sunar. Bu, işlemlerin sırayla, bir sırada düzenlenmiş gibi davranması anlamına gelir. Bu açıkça, biraz engellemeyi içerir.
Atomik işlemlerin muteks cinsinden uygulanabileceğini kesin olarak doğrulayabilirsiniz veya tam tersi. Ancak genellikle, atomik ops donanım tarafından sağlanır ve daha sonra işletim sistemi tarafından üstüne uygulanan muteksler ve diğer senkronizasyon primitifleri. Bunun nedeni, tam bir muteks gerektirmeyen bazı algoritmaların bulunması ve "kilitsiz" olarak bilinen şeyin çalışabilmesidir, bu da sadece birkaç iplik arası tutarlılık için atomik işlemlerin kullanılması anlamına gelir.
Bu soruya cevap vermiyor. İki iş parçacığı aynı anda "okuyup takas" yaparsa ne olur? Sonra her ikisi de 0'a geri dönüyor. – user1146657
@ user1146657: "Kilitle ve değiştir" işleminin amacı, * atomik * olması ve CPU'ların (CPU'ların) herhangi bir zamanda yalnızca bir iş parçacığının bunu yapabilmelerini sağlamasıdır. Yani tanım gereği, iki iş parçacığı * aynı anda yapamaz. CPU, tam olarak bu amaçla çalışmak için özel olarak tasarlanmıştır. –