Матеріал:

Паралельне програмування

txt
24.10.2024
0 0
III курс

125

1

0

0

Завантажити файл у хорошій якості

Усі придбані матеріали можна знайти в розділі мої придбані матеріали

Опис методичного матеріалу:

Паралельне програмування, використання го мови для створення монітору, синхронізації, критичної зони, керування зв*язками

  • Monitor — реалізує монітор через sync.Mutex, який відповідає за синхронізацію доступу до критичної секції.

  • CriticalSection — метод, який блокує доступ до ресурсів через mu.Lock() і звільняє після завершення через mu.Unlock() (за допомогою defer).

  • Горутини — паралельні завдання, що використовуються для запуску критичних секцій одночасно.

  • sync.WaitGroup — для синхронізації завершення горутин.

package main

import (
 "fmt"
 "sync"
 "time"
)

const (
 maxCharacters = 15
 charA = 'A'
 charB = 'B'
 charC = 'C'
)

type Monitor struct {
 sync.Mutex
 cond *sync.Cond
 characters string
 aCount int
 done bool
}

func NewMonitor() *Monitor {
 m := &Monitor{
 characters: "*",
 }
 m.cond = sync.NewCond(&m.Mutex)
 return m
}

func (m *Monitor) addA(wg *sync.WaitGroup) {
 defer wg.Done()
 for {
 m.Lock()
 if len(m.characters)-1 >= maxCharacters {
 m.done = true // Mark as done
 m.cond.Broadcast() // Notify other processes to wake up
 m.Unlock()
 return
 }
 m.characters += string(charA)
 m.aCount++
 fmt.Println(m.characters)
 m.cond.Broadcast() // Notify other processes
 m.Unlock()
 time.Sleep(time.Millisecond * 100) // Simulate work
 }
}

func (m *Monitor) addB(wg *sync.WaitGroup) {
 defer wg.Done()
 for {
 m.Lock()
 for m.aCount < 3 || len(m.characters)-1 >= maxCharacters {
 if m.done { // Check if we're done
 m.Unlock()
 return
 }
 m.cond.Wait() // Wait until condition is met
 }
 m.characters += string(charB)
 fmt.Println(m.characters)
 m.Unlock()
 time.Sleep(time.Millisecond * 150) // Simulate work
 }
}

func (m *Monitor) addC(wg *sync.WaitGroup) {
 defer wg.Done()
 for {
 m.Lock()
 for m.aCount < 3 || len(m.characters)-1 >= maxCharacters {
 if m.done { // Check if we're done
 m.Unlock()
 return
 }
 m.cond.Wait() // Wait until condition is met
 }
 m.characters += string(charC)
 fmt.Println(m.characters)
 m.Unlock()
 time.Sleep(time.Millisecond * 200) // Simulate work
 }
}

func main() {
 monitor := NewMonitor()
 var wg sync.WaitGroup
 wg.Add(3) // Three processes

 go monitor.addA(&wg)
 go monitor.addB(&wg)
 go monitor.addC(&wg)

 wg.Wait() // Wait for all goroutines to finish
 fmt.Println("Final string:", monitor.characters)
}

Вміст матеріалу:

Відображення документу є орієнтовним і призначене для ознайомлення зі змістом, та може відрізнятися від вигляду завантаженого документа.

Доступ до плеєра. Вбудувати плеєр:

0.
txt
2,0 Кб
Завантажити файл у хорошій якості

Усі придбані матеріали можна знайти в розділі мої придбані матеріали

Рекомендуємо

Програмування

pdf
Програмування

48

Аватар профіля Місько Олена Олегівна
STEM-освіта
2—4 клас

32 грн

Мова програмування. Середовище програмування

pptx
Мова програмування. Середовище програмування

428

Аватар профіля Лизько Валентина Степанівна
Інформатика
7 клас

35 грн

Презентація "Сучасні мови програмування"

pptx
Презентація "Сучасні мови програмування"

519

Аватар профіля Селівестрова Олександра Андріївна
Різне
8 клас

20 грн

Позакласний захід: Програмування для всіх. Інформатика

pptx
Позакласний захід: Програмування для всіх. Інформатика

224

Аватар профіля Серебрій Крістіна Вікторівна
Різне
5—10 клас

75 грн

Цікаві ідеї для програмування та робототехніки

pdf
Цікаві ідеї для програмування та робототехніки

37

Аватар профіля ГО "Освіта кожному"
Різне

55 грн

Комп’ютерне програмування

zip
Комп’ютерне програмування

92

Аватар профіля Тельпіс Юрій Михайлович
Географія
9 клас

25 грн

Схожі матеріали

Фотобутафорія для вчитля на 1 вересня

pdf
Фотобутафорія для вчитля на 1 вересня

1504

Аватар профіля Савіцька Надія Петрівна
Різне
дорослі та змішані

Корекційно- розвиткова програма "Весела сімейка в країні Емоцій"

pdf
Корекційно- розвиткова програма  "Весела сімейка в країні Емоцій"

2333

Аватар профіля Саф'янова Раїса Венедиктівна
Різне
4—6 років

Перший урок 2025

png
Перший урок 2025

1085

Аватар профіля Ліснича Альбіна Олексіївна
Різне
1—5 клас

Декор на дошку до 1 Вресня "Школо, привіт!"

zip
Декор на дошку до 1 Вресня "Школо, привіт!"

1426

Аватар профіля Осипчук Алла Василівна
Різне
1—4 клас

Моя абетка для діток

pdf
Моя абетка для діток

1784

Аватар профіля Прокоф‘єва Тетяна Сергіївна
Різне

Пам'яті захисників і захисниць, які загинули у сучасній війні за незалежність України

mp4
Пам'яті захисників і захисниць, які загинули у сучасній війні за незалежність України

720

Аватар профіля Колесник Людмила Володимирівна
Різне
змішані