我以为我可以用一块石头杀死两只鸟,并通过转换以下示例代码(取自http://blog.smartbear.com/programming/an-introduction-to-the-go-language)自学 Go 和 Erlang -boldly-going-where-no-man-has-ever-gone-before/ ) 从 Go 到 Erlang:
package main
import (
"fmt"
"time"
)
type Ball struct{ hits int }
func main() {
table := make(chan *Ball)
go player("ping", table)
go player("pong", table)
table <- new(Ball) // game on; toss the ball
time.Sleep(1 * time.Second)
<-table // game over; grab the ball
}
func player(name string, table chan *Ball) {
for {
ball := <-table
ball.hits++
fmt.Println(name, ball.hits)
time.Sleep(100 * time.Millisecond)
table <- ball
}
}
然而我失败了。该代码基本上创建了一个共享计数器(球)并在两个 goroutine(玩家)之间来回发送它。到目前为止一切顺利。但是我如何在 Erlang 中做类似的事情呢?我的问题是:
如何在 Erlang 中创建计数器?Erlang 似乎不允许在设置后更改变量的值。
如何在两个 erlang 进程之间共享这样的计数器?
相关分类