Матеріал:

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

txt
24.10.2024
0 0
III курс

131

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
Програмування

52

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

32 грн

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

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

435

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

35 грн

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

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

534

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

20 грн

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

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

242

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

75 грн

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

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

53

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

55 грн

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

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

111

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

25 грн

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

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

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

1697

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

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

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

2472

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

Перший урок 2025

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

1184

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

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

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

1632

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

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

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

1912

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

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

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

812

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