在Golang中,实现并发控制的主要方法是使用goroutines和channels。goroutines是轻量级的线程,可以在程序中同时运行多个任务。channels则用于在goroutines之间传递数据和同步操作。
以下是一些在Linux中使用Golang实现并发控制的方法:
go关键字创建goroutines:package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Printf("Number: %d\n", i)
time.Sleep(1 * time.Second)
}
}
func main() {
go printNumbers()
time.Sleep(6 * time.Second)
}
package main
import (
"fmt"
)
func sum(numbers []int, result chan int) {
sum := 0
for _, number := range numbers {
sum += number
}
result <- sum
}
func main() {
numbers := []int{1, 2, 3, 4, 5}
result := make(chan int)
go sum(numbers, result)
total := <-result
fmt.Printf("Sum: %d\n", total)
}
sync.WaitGroup等待一组goroutines完成:package main
import (
"fmt"
"sync"
"time"
)
func printNumbers(wg *sync.WaitGroup) {
defer wg.Done()
for i := 1; i <= 5; i++ {
fmt.Printf("Number: %d\n", i)
time.Sleep(1 * time.Second)
}
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
go printNumbers(&wg)
wg.Wait()
}
sync.Mutex实现互斥锁:package main
import (
"fmt"
"sync"
"time"
)
var counter int
var mutex sync.Mutex
func incrementCounter() {
mutex.Lock()
defer mutex.Unlock()
counter++
fmt.Printf("Counter: %d\n", counter)
}
func main() {
for i := 0; i < 5; i++ {
go incrementCounter()
time.Sleep(1 * time.Second)
}
}
这些方法可以帮助你在Linux中使用Golang实现并发控制。你可以根据具体需求选择合适的方法。