簡體   English   中英

線程如何知道共享變量的地址

[英]How threads know about the address of a shared variable

我是C語言中的多線程新手,我想知道如何在線程之間共享函數中聲明的共享(非全局和非靜態)變量。 我知道我們可以聲明兩個簡單的變量,例如

int a;

或動態的

a = (int *)malloc(sizeof(int));

但是,對我來說不清楚的是編譯器在每種情況下如何工作?

1)它會將在其線程堆棧內創建的變量的地址賦予其他線程嗎?

2)如何動態分配變量? 它的指針會廣播嗎? 還是將指針保存在.DATA或.BSS中的某個位置?

提前致謝

編譯器不在乎如何聲明變量以及如何在線程中對其進行處理。 確定分配方式是您的工作。

例如,如果您在堆棧上分配了一個int a ,則需要確保該變量在訪問它的所有線程的生命周期內都有效。 這通常意味着在變量超出范圍之前加入任何線程。

如果在堆上分配變量,則線程可以訪問該變量,而不必擔心內存超出范圍。 但是,您將需要決定如何釋放malloc分配的malloc 一個線程將需要是內存的“所有者”並對其進行free調用,否則您將發生內存泄漏。

將指針傳遞給線程將根據所使用的平台和線程庫而有所不同。 但是,它們都允許您傳遞某種參數,通常為void* 。例如, pthread_create的第4個參數允許您將指針傳遞給線程函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM