что такое стек потоков для каждого семафора - PullRequest
0 голосов
/ 14 января 2019

Я знаю, что каждый поток имеет свой собственный стек.

И мой учебник говорит:

Предположим, что конкретная реализация семафора использует стек потоков LIFO для каждого семафора. Когда поток блокирует семафор в операции P, его идентификатор помещается в стек. Аналогично, операция V извлекает идентификатор верхнего потока из стека и перезапускает этот поток

что я не понимаю, так это так как каждый поток использует свой собственный стек для хранения своего идентификатора потока, и, очевидно, потоки не разделяют стек с другими, так что означает стек потоков LIFO? поскольку поток только помещает свой поток в стек, который не будет содержать идентификатор другого потока, зачем использовать здесь термин LIFO, разве этот LIFO не имеет смысла, только если мы можем поместить несколько элементов в стек?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

что я не понимаю, так это поскольку каждый поток использует свой собственный стек для хранения своего идентификатора потока, и, очевидно, потоки не разделяют стек с другими, так что означает стек потоков LIFO?

Потоки могут делиться своими стеками с другими, если хотят. Каждый поток, имеющий свой собственный стек, не препятствует доступу одного потока к стеку другого потока.

поскольку поток только помещает свой поток в стек, который не будет содержать идентификатор другого потока, зачем использовать здесь термин LIFO, разве этот LIFO не имеет смысла, только если мы можем поместить несколько элементов в стек?

Тот факт, что каждый поток имеет свой собственный стек, не мешает другим существовать для других целей. То, что каждый поток имеет свой собственный стек, никак не влияет на то, что может делать семпахор со стеком.

Подумайте о яблоках. Вы можете иметь их. Вы можете поделиться ими. Вы можете съесть их.

Теперь, скажем, есть десять детей, и у каждого есть свое яблоко. Означает ли это, что не может существовать одиннадцатое яблоко, которым поделились? Это мешает им делать другие вещи с другими яблоками? Нет, это не так.

Так что, да, каждый поток имеет свой собственный стек. И они также могут делиться этими стеками, если хотят.

Но также семафор может иметь стек. И он может делать что угодно с этим стеком. Это никак не связано с другими стеками, которые могут иметь потоки.

0 голосов
/ 14 января 2019

Ваша ОС должна знать , какие потоки ожидают каждого семафора . Чтобы поддерживать этот список, ОС может использовать LIFO структуру данных, т.е. stack для каждого объекта семафора.

Не путайте его с stack каждого потока.

...