philosophers

package
v0.0.0-...-231c044 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2025 License: MIT Imports: 3 Imported by: 0

README

Обедающие философы

За круглым столом сидят $n$ философов. Перед каждым из них стоит тарелка с пастой. Между каждой парой соседних философов лежит вилка.

Каждый философ за столом следует алгоритму:

  1. Берет две лежащие рядом вилки
  2. Ест пасту
  3. Кладет вилки обратно на стол
  4. Размышляет над чем-то
  5. Возвращается к шагу 1

Зачем есть пасту двумя вилками – не ясно, но так устроены философы.

Разумеется, два сидящих рядом философа не могут есть одновременно, поскольку они делят между собой по крайней мере одну вилку.

Вам нужно научить философов брать и отпускать вилки таким образом, чтобы они не могли навечно заблокировать друг друга и умереть от голода.

Вилки

Для выполнения этой задачи, для начала вам нужно выполнить задание dining.

Как вы могли понять по вышеуказанной задаче, с вилками можно делать только два действия: взять и положить. Нельзя проверять, взяли ли уже вилку или нет.

Также вам известен номер сидения и номер вилок, которые вы будете брать.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Philosopher

type Philosopher struct {
	// contains filtered or unexported fields
}

func NewPhilosopher

func NewPhilosopher(table *dining.Table, seat int) *Philosopher

func (*Philosopher) AcquireForks

func (p *Philosopher) AcquireForks()

func (*Philosopher) Dine

func (p *Philosopher) Dine()

func (*Philosopher) Eat

func (p *Philosopher) Eat()

func (*Philosopher) EatsCount

func (p *Philosopher) EatsCount() int

func (*Philosopher) ReleaseForks

func (p *Philosopher) ReleaseForks()

func (*Philosopher) Think

func (p *Philosopher) Think()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL