交换并发函数
Swap Concurrent Function
为了学习概念,我正在尝试弄清楚如何在 Go 中实现并发的正向交换功能:
package main
import "fmt"
func Swap(a, b int) (int, int) {
return b, a
}
func main() {
for i := 0; i <10; i++ {
fmt.Println(Swap(i+1, i))
}
}
到目前为止我想出了这个解决方案:
package main
import "fmt"
// Only Send Channel
func Swap(a, b chan<- int) {
go func() {
for i := 0; i < 10; i++ {
a <- i + 1
b <- i
}
}()
}
func main() {
a := make(chan int)
b := make(chan int)
Swap(a, b)
for i := 0; i < 10; i++ {
fmt.Printf("chan a received: %d | chan b received: %d\n", <-a, <-b)
}
}
它似乎有效,但我不能确定。
我如何衡量这一点,有谁知道如何在 Go 中真正实现并发的简单 Swap 函数?
很抱歉提出这个问题,但我想出了解决办法。
我花了几天时间才能够做到这一点,几个小时后我 post 在这个论坛上编辑的那天,我发现了如何解决它。
我要 post 在高级 Golang 工作面试中给我的代码和演练,我无法回答,我希望这可以帮助别人。
// Pass as a parameter a int slice of type channel
// Send the swapped information throw the channel
func Swap(a, b int, ch chan []int) {
ch <- []int{b, a}
}
func main() {
ch := make(chan []int)
for i := 0; i < 100; i++ {
// Call Worker with the created channel
go Swap(i+1, i, ch)
}
for i := 0; i < 100; i++ {
// Receive Channel Value
fmt.Println(<-ch)
}
}
非常感谢对此的任何评论、改进和概念参考。
为了学习概念,我正在尝试弄清楚如何在 Go 中实现并发的正向交换功能:
package main
import "fmt"
func Swap(a, b int) (int, int) {
return b, a
}
func main() {
for i := 0; i <10; i++ {
fmt.Println(Swap(i+1, i))
}
}
到目前为止我想出了这个解决方案:
package main
import "fmt"
// Only Send Channel
func Swap(a, b chan<- int) {
go func() {
for i := 0; i < 10; i++ {
a <- i + 1
b <- i
}
}()
}
func main() {
a := make(chan int)
b := make(chan int)
Swap(a, b)
for i := 0; i < 10; i++ {
fmt.Printf("chan a received: %d | chan b received: %d\n", <-a, <-b)
}
}
它似乎有效,但我不能确定。 我如何衡量这一点,有谁知道如何在 Go 中真正实现并发的简单 Swap 函数?
很抱歉提出这个问题,但我想出了解决办法。 我花了几天时间才能够做到这一点,几个小时后我 post 在这个论坛上编辑的那天,我发现了如何解决它。 我要 post 在高级 Golang 工作面试中给我的代码和演练,我无法回答,我希望这可以帮助别人。
// Pass as a parameter a int slice of type channel
// Send the swapped information throw the channel
func Swap(a, b int, ch chan []int) {
ch <- []int{b, a}
}
func main() {
ch := make(chan []int)
for i := 0; i < 100; i++ {
// Call Worker with the created channel
go Swap(i+1, i, ch)
}
for i := 0; i < 100; i++ {
// Receive Channel Value
fmt.Println(<-ch)
}
}
非常感谢对此的任何评论、改进和概念参考。