美文网首页
Linux--信号量无血缘进程间同步互斥

Linux--信号量无血缘进程间同步互斥

作者: 锈色的栅栏 | 来源:发表于2024-11-17 08:54 被阅读0次

有名信号量 用于 无血缘的进程间互斥

1、创建一个有名信号量

#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h> /* For mode constants */
#include <semaphore.h>
//信号量存在
sem_t* sem_open(const char *name,int oflag);
//信号量不存在
sem_t* sem_open(const char* name,int oflag,mode_t mode, unsigned int value);

功能:
        创建一个信号量
参数:
        name:信号量的名字
        oflag:sem_open函数的权限标志
        mode:文件权限(可读、可写、可执行 0777)的设置
        value:信号量的初始值
返回值:
        信号量的地址,
        失败:SEM_FAILED

2、信号量的关闭:

int sem_close(sem_t* sem);

功能:
        关闭信号量
参数:
        信号量的的地址
返回值:
        成功0
        失败-1

3、信号量文件的删除

#include<semaphore.h>
int sem_unlink(const char* name);

功能:
        删除信号量的文件
参数:
        信号量的文件名
返回值:
        成功0
        失败-1

示例代码

08_taskA.c

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<fcntl.h> 
#include<sys/stat.h>

void my_printf(char* str){
    int i = 0;
    while (str[i] != '\0') 
   {
          printf("%c", str[i++]); 
         fflush(stdout);
          sleep(1); 
     }
   return;
}
int main(int argc,char const* argv[])
{
         //创建一个有名信号量sem_open 最后一个参数为初始值
         sem_t *sem = sem_open("sem", O_RDWR|O_CREAT, 0666, 1);
         sem_wait(sem);
         my_printf("bbbbbbld");
        sem_post(sem); 
        sem_close(sem);
        sem_destroy(sem); 
        return 0;
}

08_taskB.c

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<fcntl.h> 
#include<sys/stat.h>
void my_printf(char* str)
{
    int i = 0;
    while (str[i] != '\0')
    {
          printf("%c", str[i++]);
          fflush(stdout);
          sleep(1);
      }
   return;
}
int main(int argc,char const* argv[]){
         //创建一个有名信号量sem_open 最后一个参数为初始值
         sem_t *sem = sem_open("sem", O_RDWR|O_CREAT, 0666, 1); 
         sem_wait(sem);
         my_printf("hsaafdd");
         sem_post(sem);
         sem_close(sem);
         sem_destroy(sem);
         return 0;
}


有名信号量 用于 无血缘的进程间同步

示例代码

09_taskA.c

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<fcntl.h> 
#include<sys/stat.h>
void my_printf(char* str){
    int i = 0;
    while (str[i] != '\0')
    {
          printf("%c", str[i++]);
          fflush(stdout);
          sleep(1);
      }
   return;
}
int main(int argc,char const* argv[])
{
         //创建一个有名信号量sem_open 最后一个参数为初始值
         sem_t *sem1 = sem_open("sem1", O_RDWR|O_CREAT, 0666, 1); 
         sem_t *sem2 = sem_open("sem2", O_RDWR|O_CREAT, 0666, 1); 
         

         sem_wait(sem1);
         my_printf("bbbbbbld");
         sem_post(sem2);
         

        sem_close(sem1);
         sem_close(sem2);
         

        sem_destroy(sem1);
         sem_destroy(sem2);
         return 0;
}

09_taskB.c

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<fcntl.h> 
#include<sys/stat.h>
void my_printf(char* str)
{
    int i = 0;
    while (str[i] != '\0')
    {
          printf("%c", str[i++]);
          fflush(stdout);
          sleep(1);
      }   
      return;
}
int main(int argc,char const* argv[])
{
         //创建一个有名信号量sem_open 最后一个参数为初始值
         sem_t *sem1 = sem_open("sem1", O_RDWR|O_CREAT, 0666, 1);
         sem_t *sem2 = sem_open("sem2", O_RDWR|O_CREAT, 0666, 1); 

         sem_wait(sem2);
         my_printf("bbbbbbld");
         sem_post(sem1); 
         sem_close(sem1);
         sem_close(sem2);
         sem_destroy(sem1);
         sem_destroy(sem2);
         return 0;
}

相关文章

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量、互斥量、读写锁,等等。那进程间如何实现同步呢?本文介绍两种方式:互斥...

  • 第二章 信号量机制

    3)信号量的基本应用:实现进程互斥; 实现进程间的前趋关系(有序) *互斥信号量注意点: 1.互斥信号量mutex...

  • Unix进程间通信详解

    主要讲解进程间通信方式,包含管道 FIFO命名管道 消息队列 同步(互斥锁、条件变量、信号量、读写锁、fcntl记...

  • PV原语

    概念 PV原语通过操作信号量来完成进程间的同步和互斥。信号量由操作系统来维护 原语 P原语 为阻塞原语,负责把当前...

  • 第二章 进程通信、线程

    进程通信:进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但...

  • 理解操作系统之信号量的应用

    利用信号量实现进程互斥(模式) 利用信号量实现前驱关系(模式) 利用记录型信号量实现同步(模式) 1.利用信号量实...

  • 二.进程(6-7)进程通信、线程

    进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但作为通信...

  • 信号量

    头文件:#include 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制...

  • 2-6-7进程通信、线程

    进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但作为通信工具...

网友评论

      本文标题:Linux--信号量无血缘进程间同步互斥

      本文链接:https://www.haomeiwen.com/subject/leqtjjtx.html