使用来自不同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 (将#修改为@)