如何使用Julia在linux下做命名信号量?

时间:2017-07-09 17:03:00

标签: ipc julia semaphore

要在Julia进程和用C,C ++或Julia编写的其他运行进程之间进行进程间通信,我希望使用命名信号量进行同步。但是它似乎不适用于

  1. 命名的信号量不会在进程之间共享
  2. 初始值不正确
  3. 我在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可以使用命名信号量吗?

0 个答案:

没有答案