Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 每个信号量的线程堆栈是什么_Linux_Multithreading_Stack_Semaphore - Fatal编程技术网

Linux 每个信号量的线程堆栈是什么

Linux 每个信号量的线程堆栈是什么,linux,multithreading,stack,semaphore,Linux,Multithreading,Stack,Semaphore,我知道每个线程都有自己的堆栈 我的课本上说: 假设一个特定的信号量实现为每个信号量使用一个后进先出线程堆栈。当线程在P操作中阻塞信号量时,它的ID被推送到堆栈上。类似地,V操作从堆栈中弹出顶部线程ID并重新启动该线程 我不明白的是。由于每个线程都使用自己的堆栈来存储线程ID,而且显然线程不与其他线程共享堆栈,所以后进先出线程堆栈意味着什么?因为一个线程只将其线程放在堆栈上,而堆栈中不包含另一个线程的id,为什么在这里使用后进先出术语,如果我们可以在堆栈上推送多个项目,后进先出不是很有意义吗?您的

我知道每个线程都有自己的堆栈

我的课本上说:

假设一个特定的信号量实现为每个信号量使用一个后进先出线程堆栈。当线程在P操作中阻塞信号量时,它的ID被推送到堆栈上。类似地,V操作从堆栈中弹出顶部线程ID并重新启动该线程


我不明白的是。由于每个线程都使用自己的堆栈来存储线程ID,而且显然线程不与其他线程共享堆栈,所以后进先出线程堆栈意味着什么?因为一个线程只将其线程放在堆栈上,而堆栈中不包含另一个线程的id,为什么在这里使用后进先出术语,如果我们可以在堆栈上推送多个项目,后进先出不是很有意义吗?

您的操作系统需要知道哪些线程正在等待每个信号量。为了维护该列表,操作系统可以对每个信号量对象使用
LIFO
数据结构,即
stack

不要将其与每个线程的
堆栈
混淆

我不明白的是。由于每个线程都使用自己的堆栈来存储线程ID,而且显然线程不与其他线程共享堆栈,所以后进先出线程堆栈意味着什么

如果线程愿意,可以与其他线程共享它们的堆栈。每个线程都有自己的堆栈,不妨碍一个线程访问另一个线程的堆栈

因为一个线程只把它的线程放在堆栈上,而堆栈中不包含另一个线程的id,为什么在这里使用LIFO术语,如果我们可以在堆栈上推送多个项目,LIFO不是只有意义吗

每个线程都有自己的堆栈这一事实并不妨碍其他线程出于其他目的而存在。每个线程都有自己的堆栈对sempahore可以使用堆栈做什么或不使用堆栈没有影响

想想苹果。你可以拥有它们。你可以分享它们。你可以吃

现在,假设有十个孩子,每个孩子都有自己的苹果。这是否意味着不可能存在第十一个共享的苹果?这会阻止他们用其他苹果做其他事情吗?不,没有

因此,是的,每个线程都有自己的堆栈。如果愿意,他们也可以共享这些堆栈

但是,信号量也可以有一个堆栈。它可以用这个堆栈做任何它想做的事情。这与线程可能拥有的任何其他堆栈无关