Adakah pembolehubah benang-tempatan dalam C 11 secara automatik dianggap sebagai statik?

DDD
Lepaskan: 2024-10-30 01:04:28
asal
311 orang telah melayarinya

Are thread-local variables in C  11 automatically treated as static?

Pembolehubah Setempat Benang dalam C 11: Statik Secara Automatik?

Dalam C 11, pembolehubah thread_local ialah mekanisme yang berkuasa untuk mengurus data yang unik untuk setiap utas pelaksana. Walau bagaimanapun, persoalan biasa timbul: adakah ia secara automatik dianggap sebagai statik? Untuk menjawabnya, mari kita periksa dua segmen kod:

Segmen Kod 1

<code class="cpp">void f() {
    thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}</code>
Salin selepas log masuk

Segmen Kod 2

<code class="cpp">void f() {
    static thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}</code>
Salin selepas log masuk

Piawaian C memberikan jawapan yang pasti:

Mengikut Piawaian:

Apabila thread_local digunakan pada pembolehubah skop blok, penentu kelas storan statik tersirat jika ia tidak kelihatan secara eksplisit.

Oleh itu, Kod Segmen 1 adalah bersamaan dengan Kod Segmen 2. Walau bagaimanapun, ini tidak bermakna bahawa thread_local dan pembolehubah statik boleh ditukar ganti.

Thread-Local vs. Statik Pembolehubah

Walaupun thread_local pembolehubah membayangkan storan statik, mereka mempunyai perbezaan asas daripada pembolehubah statik:

Semua pembolehubah diisytiharkan dengan kata kunci thread_local mempunyai _tempoh storan benang_. Storan untuk entiti ini kekal sepanjang tempoh urutan ia dicipta. Terdapat objek atau rujukan yang berbeza bagi setiap utas dan penggunaan nama yang diisytiharkan merujuk kepada entiti yang dikaitkan dengan utas semasa.

Pada dasarnya, tempoh penyimpanan utas memastikan setiap utas mempunyai contoh sendiri pembolehubah thread_local. Ini berbeza dengan pembolehubah statik, yang dikongsi merentas semua urutan dalam satu proses.

Implikasi untuk Multithreading

Seperti yang dicadangkan oleh soalan asal, thread_local variables boleh digunakan untuk menggantikan pembolehubah statik dalam program berbilang benang, menghapuskan keadaan perlumbaan yang berpotensi dan perbalahan data. Walau bagaimanapun, adalah penting untuk diingat bahawa pembolehubah thread_local tidak dikongsi merentasi urutan dan hanya boleh digunakan apabila data khusus thread diperlukan.

Atas ialah kandungan terperinci Adakah pembolehubah benang-tempatan dalam C 11 secara automatik dianggap sebagai statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan