Сьогодні о 18:00
Вебінар:
«
Емоційний інтелект дошкільника: від першого усвідомлення до свідомої регуляції
»
Взяти участь Всі події
Матеріал:

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

txt
24.10.2024
0 0
III курс

8

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

71

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

32 грн

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

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

469

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

35 грн

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

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

165

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

25 грн

Класифікація мов програмування

zip
Класифікація мов програмування

45

Аватар профіля Ніколаєва Наталія Олександрівна
Інформатика
II курс

33 грн

Поняття мови програмування. Складові мови програмування.

pptx
Поняття мови програмування. Складові мови програмування.

602

Аватар профіля Серебрій Крістіна Вікторівна
Інформатика
3—11 клас

50 грн

Мови програмування. Середовище програмування. Знайомство з Python

pptx
Мови програмування. Середовище програмування. Знайомство з Python

555

Аватар профіля Комок Ірина Вікторівна
Інформатика
7—8 клас

40 грн

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

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

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

3099

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

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

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

2310

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

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

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

1220

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

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

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

15395

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

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

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

221

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

Портфоліо

zip
Портфоліо

300

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