linux线程通信信号以及进程通信信号
2015-09-02 09:36
435 查看
信号函数族
sem_init
sem_post
sem_wait
sem_destroy
通过信号和锁可以实现多线程通信及消息队列
进程间通信信号函数
semget
semctl
semop
if((m_semid=semget(key,1,IPC_CREAT|IPC_EXCL|0666))==-1)
{
m_semid = semget(key, 1, 0);
if(m_semid == -1) return false;
}
else
{
semctl(m_semid,0,SETVAL,1);
}
static int semaphore_p()
{
//对信号量做减1操作,即等待P(sv)
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1;//P()
sem_b.sem_flg = SEM_UNDO;
if(semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed\n");
return 0;
}
return 1;
}
static int semaphore_v()
{
//这是一个释放操作,它使信号量变为可用,即发送信号V(sv)
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = 1;//V()
sem_b.sem_flg = SEM_UNDO;
if(semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_v failed\n");
return 0;
}
return 1;
}
sem_init
sem_post
sem_wait
sem_destroy
通过信号和锁可以实现多线程通信及消息队列
进程间通信信号函数
semget
semctl
semop
if((m_semid=semget(key,1,IPC_CREAT|IPC_EXCL|0666))==-1)
{
m_semid = semget(key, 1, 0);
if(m_semid == -1) return false;
}
else
{
semctl(m_semid,0,SETVAL,1);
}
static int semaphore_p()
{
//对信号量做减1操作,即等待P(sv)
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1;//P()
sem_b.sem_flg = SEM_UNDO;
if(semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed\n");
return 0;
}
return 1;
}
static int semaphore_v()
{
//这是一个释放操作,它使信号量变为可用,即发送信号V(sv)
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = 1;//V()
sem_b.sem_flg = SEM_UNDO;
if(semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_v failed\n");
return 0;
}
return 1;
}
相关文章推荐
- 在 Linux 下使用 RAID(七):在 RAID 中扩展现有的 RAID 阵列和删除故障的磁盘
- Spark修炼之道(基础篇)——Linux大数据开发基础:第七节:进程管理
- Linux常用命令大全
- 使用Clonezilla("再生龙")对Linux系统硬盘进行镜像和克隆
- linux 在系统启动过程
- 如何修改linux的系统时间
- Linux 查看系统硬件信息(实例详解)
- Linux 查看系统硬件信息(实例详解)
- Linux下添加新硬盘,分区及挂载
- Linux下添加新硬盘,分区及挂载
- 看这些孩子在 Ubuntu 的 Linux 终端下玩耍
- linux 目录结构及其相关命令
- Linux程序包编译安装
- 把/root/目录下的所有目录拷贝到/tmp/
- 输入数字,计算从1到输入数字的和,要求输入小于1,重输直到输入正确的数字为止
- CentOS 配置防火墙操作实例
- Centos6 安装zabbix-agent
- linux常用命令
- virtualbox centos6.7 主机和虚拟机之间通信设置
- Linux命令备忘实例(2)——变量