Golang
文章平均质量分 51
记录开发中有价值的点
kslidong
神仙朝游北海暮苍梧
展开
-
谨慎在多进程中使用Go生成的动态库
之前写过一篇《C语言调用Go生成的动态库中的函数》,实际在OpenSIPS中使用时,却发现程序经常会“陷入”动态库函数的调用。使用GDB附加到进程,函数调用block时堆栈如下:#0 runtime.futex () at /usr/local/go/src/runtime/sys_linux_amd64.s:520#1 0x00007f13340e7d16 in runtime.futexsleep (addr=0xfffffffffffffe00, val=0, ns=-1) at /u原创 2021-11-11 15:14:20 · 1388 阅读 · 0 评论 -
C语言调用Go生成的动态库中的函数
工作中遇到的Go语言调用C函数的场景比较多,之前也写过一篇《cgo中将C函数返回的数组转为Go中的slice》。目前在开发OpenSIPS的过程中,有些功能用C写起来麻烦,故第一次尝试了用C调用Go。首先用Go实现功能,示例代码如下package mainimport "C"import ( "fmt" "sync" "time")var notifyChan chan struct{} = make(chan struct{})var wg sync.WaitGroup原创 2021-10-26 19:51:31 · 1020 阅读 · 2 评论 -
Cgo中将C函数返回的数组转为Go中的slice
之前在go服务中,要调用同事动态库中的一个目标检测函数:typedef struct { int x; int y; int width; int height;} HRect;LIB_EXPORT int detect_objects(void *ptr, const char *imgPath, HRect srect, HRect **rrects, int *rsize);其中第四个参数,需要我传递一个区域参数的二级指针,动态库中分配内存、计算目标检测原创 2021-07-07 17:52:05 · 1384 阅读 · 0 评论