goroutine go语言用法
时间: 2024-02-11 19:43:52 浏览: 21
Goroutine 是 Go 语言中用于实现并发的机制,是一种轻量级的线程。它由 Go 运行时负责调度,在程序并发执行时,Go 运行时会自动为每个 goroutine 分配执行时间,因此不需要手动管理线程或者锁。
使用 Goroutine 非常简单,只要在函数前面添加"go"关键字即可创建并启动一个新的 Goroutine。例如:
go myFunc()
这条语句会在一个新的 Goroutine 中执行 myFunc() 函数。在同一个程序中,我们可以启动多个 Goroutine 来完成并行计算、并发通信等任务,而这些 Goroutine 会自动被 Go 运行时调度执行,互不影响。
需要注意的是,Goroutine 之间可以通过 channel 进行通信,而不是共享内存,并且 Goroutine 之间是可以安全地访问数据的,因为 Go 运行时会自动进行锁调度。
相关问题
go语言同步map的用法
go语言的sync包提供了一个叫做sync.Map的类型,它是一个并发安全的map,可以在多个goroutine之间安全地读写。
sync.Map的用法如下:
1. 创建一个sync.Map对象
```
var m sync.Map
```
2. 向map中添加键值对
```
m.Store("key1", "value1")
```
3. 从map中获取值
```
value, ok := m.Load("key1")
if ok {
fmt.Println(value)
}
```
4. 删除map中的键值对
```
m.Delete("key1")
```
需要注意的是,sync.Map并不支持迭代操作,也就是说不能使用for range来遍历它的键值对。如果需要遍历,可以先将sync.Map中的键值对复制到一个普通的map中,再进行操作。
Go语言读写锁使用案例代码
以下是一个使用 Go 语言读写锁的示例代码:
```
package main
import (
"fmt"
"sync"
)
type Counter struct {
value int
mu sync.RWMutex
}
func (c *Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
}
func (c *Counter) Decrement() {
c.mu.Lock()
defer c.mu.Unlock()
c.value--
}
func (c *Counter) Value() int {
c.mu.RLock()
defer c.mu.RUnlock()
return c.value
}
func main() {
c := Counter{value: }
var wg sync.WaitGroup
for i := ; i < 100; i++ {
wg.Add(1)
go func() {
c.Increment()
wg.Done()
}()
}
wg.Wait()
fmt.Println(c.Value())
}
```
这个示例代码定义了一个 Counter 结构体,其中包含一个整数值和一个读写锁。Increment 和 Decrement 方法分别对值进行加一和减一的操作,使用写锁来保证并发安全。Value 方法用于获取当前值,使用读锁来保证并发安全。在主函数中,启动了 100 个 goroutine 来对 Counter 进行加一操作,最后输出 Counter 的值。