首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
/*import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// 工作函数,演示通道作为信号量
|
||||
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
|
||||
// 获取信号量
|
||||
sem <- struct{}{}
|
||||
defer func() { <-sem }() // 释放信号量
|
||||
|
||||
fmt.Printf("Worker %d 开始工作\n", id)
|
||||
// 模拟工作
|
||||
for i := 0; i < 3; i++ {
|
||||
fmt.Printf("Worker %d 工作中...\n", id)
|
||||
}
|
||||
fmt.Printf("Worker %d 完成工作\n", id)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 带缓冲通道(容量2)
|
||||
chBuffered := make(chan int, 2)
|
||||
chBuffered <- 1 // 发送不阻塞(未达容量)
|
||||
chBuffered <- 2
|
||||
fmt.Println(<-chBuffered) // 接收:1
|
||||
fmt.Println(<-chBuffered) // 接收:2
|
||||
close(chBuffered)
|
||||
|
||||
// 关闭后发送会panic,接收返回零值
|
||||
if v, ok := <-chBuffered; ok {
|
||||
fmt.Println(v)
|
||||
} else {
|
||||
fmt.Println("通道已关闭") // 输出此句
|
||||
}
|
||||
|
||||
// 无缓冲通道(发送/接收需同时就绪)
|
||||
chUnbuffered := make(chan string)
|
||||
go func() {
|
||||
chUnbuffered <- "hello from goroutine" // 发送方:等待接收
|
||||
}()
|
||||
msg := <-chUnbuffered // 接收方:等待发送
|
||||
fmt.Println(msg) // 输出:hello from goroutine
|
||||
close(chUnbuffered)
|
||||
|
||||
// 通道实现信号量(限制并发数)
|
||||
var wg sync.WaitGroup
|
||||
sem := make(chan struct{}, 2) // 并发数限制为2
|
||||
|
||||
for i := 1; i <= 5; i++ {
|
||||
wg.Add(1)
|
||||
go worker(i, sem, &wg)
|
||||
}
|
||||
wg.Wait()
|
||||
close(sem)
|
||||
fmt.Println("所有工作完成")
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user