要在Julia进程和用C,C ++或Julia编写的其他运行进程之间进行进程间通信,我希望使用命名信号量进行同步。但是它似乎不适用于
我在julia-0.5.2和以下代码:
function sem_open(sem_seg_name::String; is_creator::Bool=false)::Ref{Cint}
permission = Base.S_IRUSR | Base.S_IWUSR | Base.S_IRGRP | Base.S_IROTH # 0644
sem_t = is_creator ?
ccall(:sem_open, Cint, (Cstring, Cint, Base.Cmode_t, Cuint), sem_seg_name, Base.JL_O_CREAT, permission, Cuint(1)) :
ccall(:sem_open, Cint, (Cstring, Cint), sem_seg_name, Base.JL_O_RDWR)
systemerror(string("sem_open failed to ", (is_creator?"create":"open"), " semaphore for ", sem_seg_name), sem_t == 0)
return sem_t
end
将创建一个文件/dev/shm/sem.xxx。
但是信号量值在过程开始的所有时间都是随机的,好像忽略了C Api的最后一个参数:
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
打开此命名信号量的另一个进程将获得不同的值。我可以像往常一样使用ccall(:sem_init)设置值并发布/等待它,但它只能在同一个进程中工作。
Julia ccall可以使用命名信号量吗?