我使用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计数信号量制作二进制信号量?
答案 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");