pthread_key_t ve pthread_key_create öğelerinin nasıl çalıştığını anlamaya çalışırken sorun yaşıyorum. Anladığım kadarıyla, her bir iş parçacığı TLS (iş parçacığı yerel depolama alanı) ve iş parçacığı yerel depolama alanına erişmek için bir anahtarın kullanılmasını sağlar. Ne elde edemiyorum bir anahtar oluşturulduğunda, her iş parçacığı kullanmak için olsun? Konu 0 iş parçacığı 0 oluşturur, iş parçacığı 1'i sonra 0 tuşunu kullanabilir mi? Eğer iş parçacığı 1 anahtar 0 kullanıyorsa, kendi TLS veya iş parçacığı 0'ın TLS'sine erişir mi?pthread_key_t ve pthread_key_create yöntemi nasıl çalışır?
Kullanılmakta olan tüm anahtarları izleyen bazı genel dizi veya bir şey var mı?
pthread_key_create için kaynak koduna bakarak, pthread_key_t içinde TlsAlloc formuna döndürülen her ne olursa olsun, anahtar olarak adlandırılan bir değişken ayarlar. Anahtar bir işaretçidir ancak TlsAlloc'tan ne döndürülür? her iş parçacığı için sadece bir dizi boş yuva mı? Ayrıca, her bir iş parçacığının kendi Tls alanı varsa, dizideki her öğe yalnızca Tls boşluğunu işaret eder mi? Sadece bir yerlerde kafam karıştı ve nerede olduğunu bilmiyorum. Belki de bunu olması gerekenden daha karmaşık yapıyorum. – user972276
Teknik olarak evet, pthread_key, _create işlevini çağırdığınızda oluşturulan seyrek bir dizinin yalnızca bir göstericisidir. Bir iş parçacığı _setspecific() işlevini çağırdığında, dizideki bir girdide iş parçacığının kimliğini ve işlev tarafından saklanan değeri (örneğimde bir yapının işaretçisi) doldurur. Bir iş parçacığı _getspecific() işlevini çağırdığında, diziyi anahtar tarafından arar, ardından bu dizideki girdiyi, iş parçacığı kimliği tarafından depolanan değeri bulmak için arar. –
Bu arabirimlerin noktasını, sahne arkasında neler olup bittiğini özetlersek, programınızın platform/uygulamaya bağlı olmadığını unutmayın. –