gpt4 book ai didi

c - linux线程和内存/变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:05 24 4
gpt4 key购买 nike

APUE3 表示“单个进程中的所有线程都可以访问相同的进程组件,例如文件描述符和内存。”和“每个线程都有自己的堆栈”。不过,我有些困惑。

什么样的变量被所有线程“共享”? “共享”是指,例如,如果一个线程更改 X 的值,则另一个线程可以看到此更改。我猜只有那些“全局”变量(即在所有函数之外定义的变量),对吧?

如果一个线程(不是主线程/进程)退出,这个线程中定义的“全局”变量在其他线程中是否仍然可用?

如果线程退出,线程内函数中定义的静态变量如何?

如果我在函数F中创建一个线程T,并将F的某个局部变量(比如&V)的指针/地址传递给T的启动函数,如果F返回,我猜&V不再无效.会发生什么?

还有一些类似的困惑....

感谢您的澄清!

最佳答案

APUE3 says "All threads within a single process have access to the same process components, such as file descriptors and memory.", and "each thread has its own stack". I have some confusions, though.

What kind of variables are 'shared' by all threads? By 'sharing', I mean that, for example, if one thread change X's value, anohter thread can see this change. I guess only those 'global' variables (i.e., that are defined outside all functions), right?

是的,全局变量。那些未在函数中定义为局部(堆栈)变量,而是在程序的数据部分中定义的变量。

If a thread (not the main thread/process) exits, are 'global' variables defined in this thread still available in other threads?

无效的问题。全局变量就是:global。它们不在任何一个线程中定义 - 它们存在于进程中的所有线程

How about the static variables defined in a function within a thread, if this thread exits?

静态与可见性有关,与生命周期/存储无关。您可以(并且应该!)拥有静态全局变量。

If I create a thread T in a function F, and passes the pointer/address of some local variable (say, &V) of F to T's start-up function, if F returns, I guess is &V is no longer invalid. What will happen?

任何事情都可能发生,包括 demons flying out of your nose .

基本上可以将两个进程(运行相同的可执行程序)视为两个完全独立的副本,它们不能以任何方式相互干扰。

现在有两个线程在运行(在-同一个进程中-)几乎与那个概念相反。他们几乎共享一切。因此一个线程可以完全自由地修改另一个线程可能正在访问的全局变量。防止这些危险情况通常称为同步主题。

关于c - linux线程和内存/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com