使用C语言中的POSIX在多个进程(非线程,仅处理)之间共享二进制信号量

时间:2015-08-22 12:49:51

标签: c multithreading semaphore binary-semaphore

我使用C语言中的POSIX在多个进程(不是线程,仅处理)之间共享二进制信号量。 如果我使用互斥锁创建二进制信号量,

 typedef struct BIN_SEMA
  { 
     pthread_cond_t  cv;    /* cond. variable 
                                   - used to block threads */
     pthread_mutex_t mutex; /* mutex variable
                             - used to prevents concurrent
                                    access to the variable "flag" */
     int     flag;          /* Semaphore state: 
                                    0 = down, 1 = up */
   } bin_sema;

我将只能在线程中使用它,但我想在进程之间共享。 所以我的问题是, 如何使用posix计数信号量制作二进制信号量?

1 个答案:

答案 0 :(得分:2)

二进制信号量的含义尚不清楚。如果你的意思是可以有两种状态,那么一个互斥体或用一个初始化的信号量在功能上是等价的。

如果要跨进程共享信号量,可以使用命名信号量...

public void service(ServletRequest request,ServletResponse response)throws ServletException,IOException
    {
            String str1=request.getParameter("fname");
            String str2=request.getParameter("sname");// " sname" is not "sname"
            boolean err=true;
            try{//try to convert String to int
            int num1=Integer.parseInt(str1);
            int num2=Integer.parseInt(str2);err=false;
            }catch(Exception ex){}
            if(err){out.println("Invalid number format provided");}
            else{int  sum=num1+num2;
            PrintWriter out=response.getWriter();
            out.println("Given fnumber  is   "+str1);
            out.println(" --------------");
            out.println("Given second number is"+str2);
            out.println(" --------------");
            out.println("Sum of numbers is "+sum);
            }
    }

要跨进程强制执行互斥锁,可以使用文件...

sem_t* sem = sem_open("/APP/SEMAPHORE", O_CREAT, (S_IRUSR | S_IWUSR), 1);

sem_wait(sem);

// do stuff

sem_post(sem);

// do more stuff

sem_unlink("/APP/SEMAPHORE");