微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用来自不同Goroutine的全局变量调用C函数

如何解决使用来自不同Goroutine的全局变量调用C函数

例如,我有一个运行C循环的goroutine更新全局变量,而另一个goroutine读取了该变量,是否会发生竞争条件?而且由于Cgo将使用g0作为外部函数调用C函数,调度将如何发生,以便另一个goroutine可以进入内部并读取该变量的值?此外,如果有任何竞争条件,我是否可以使用pthread锁定消除竞争条件?

c代码文件是:

int i = 0;
void loop() {
   while(1) i++;
}
int read() {
  return i;
}

Golang文件为:

/*
#include <test.c>
extern void loop();
extern  int read();
*/
import "C"
import "fmt"
func main() {
   go func(){
      C.loop()
   }()
   for {
     fmt.Println(C.read())
   }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。