当前位置:  技术问答>linux和unix

信号PV操作,初学者的疑问

    来源: 互联网  发布时间:2016-11-22

    本文导语:  我在自学LINUX,在写信号PV操作时发现程序只能正确执行一遍,下一遍则会报错。需重启计算机才能正确执行,不知道是为什么。希望大家帮忙看一下问题出在哪里了。 /*PV.c*/ #include #include #include #include #include  #includ...

我在自学LINUX,在写信号PV操作时发现程序只能正确执行一遍,下一遍则会报错。需重启计算机才能正确执行,不知道是为什么。希望大家帮忙看一下问题出在哪里了。

/*PV.c*/
#include
#include
#include
#include
#include 
#include
#include

union semun{
int val;
struct semid_ds *buf; 
unsigned short *array;
};

/*创建信号量*/
int init_sem(int semid,int val){
union semun sem_union;
sem_union.val = val;

if(semctl(semid,0,SETVAL,sem_union) == -1)
{
perror("semctl");
return -1;
}

printf("信号:%d,创建信号量成功!n",semid);
return 0;
}

/*删除信号量*/
int del_sem(int semid){
union semun sem_union;


if(semctl(semid,0,IPC_RMID,sem_union) == -1)
{
perror("semctl");
return -1;
}

printf("信号:%d,删除信号量成功!n",semid);
return 0;
}

/*P操作*/
int sem_P(int semid){
int rs;
struct sembuf sops;

sops.sem_num = 0;
sops.sem_op = -1;
sops.sem_flg = SEM_UNDO;

if((rs = semop(semid,&sops,1)) == -1)
{
perror("semop sem_P");
return -1;
}else{
return rs;
}

}

/*V操作*/
int sem_V(int semid){
int rs;
struct sembuf sops;

sops.sem_num = 0;
sops.sem_op = +1;
sops.sem_flg = SEM_UNDO;

if((rs = semop(semid,&sops,1)) == -1)
{
perror("semop sem_V");
return -1;
}else{
return rs;
}

}

void main()
{
int semid,i;
key_t key;
pid_t pid;

key = ftok(".",'1');
semget(key,1,0777 | IPC_CREAT);

init_sem(semid,0);
pid = fork();
if(pid == -1)
{
perror("fork");
}

if(pid == 0)
{
printf("子进程执行5秒n");
for(i = 0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于信号量与UNIX信号的疑问
  • 关于系统信号处理函数signal()的疑问.
  • 关于信号量ID的疑问
  • linux posix信号量使用疑问
  • linux中信号signal函数实例遇到的疑问
  • 关于实时信号的一点疑问,请赐教
  • 关于Linux程序设计中多线程信号量的一个疑问
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 当信号量(灯)遇上信号,help!
  • 请问什么时候发出SIGKILL信号、什么时候发出SIGTERM信号?
  • 安全信号和不安全信号的实现机制有什么不同么?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • 关于消息队列信号量信号共享内存等核心编程的问题(求知若渴!!!.....)
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号? iis7站长之家
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 终端被关闭后,bash收到哪些信号,这些信号是怎么来的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?
  • 大侠们求指导,电信骨干网光纤信号分流成多个千兆网信号
  • 32号信号和33号信号哪里去拉?
  • 请问线程中的信号量,怎么设置成0,1信号量?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3