Матеріал:

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

txt
24.10.2024
0 0
III курс

3

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

58

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

32 грн

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

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

450

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

35 грн

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

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

550

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

20 грн

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

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

252

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

75 грн

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

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

67

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

55 грн

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

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

143

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

25 грн

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

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

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

2686

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

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

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

2061

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

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

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

986

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

«Технологія приготування заправних супів: солянка збірна м’ясна, солянка домашня»

docx
«Технологія приготування заправних супів: солянка збірна м’ясна, солянка домашня»

15293

Аватар профіля Саута Раїса Миколаївна
Різне

Технологія приготування супу горохового, супу з фрикадельками. Способи подавання. Вимоги до якості.

doc
Технологія приготування супу горохового, супу з фрикадельками. Способи подавання. Вимоги до якості.

39

Аватар профіля Саута Раїса Миколаївна
Різне

Портфоліо

zip
Портфоліо

122

Аватар профіля Теслюк Яна Валеріївна
Різне
3—6 років, 1—12 клас, I—VI курси, дорослі та змішані