posix信号量和systemv信号量

2024-06-20 22:04
文章标签 信号量 posix systemv

本文主要是介绍posix信号量和systemv信号量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. posix 无名信号量  : 进程持续 ,其实就是计数器不止1 的互斥锁

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
/*使用信号量保护临界资源的访问*/
/*临界资源*/
char* data[5];
int size = 0;
/*信号量*/
sem_t lock;
void* task1(void* p){sem_wait(&lock);//加锁  // 如果信号量的值大于 0,那么 sem_wait 会立即成功返回,并将信号量的值减 1。但是,如果信号量的值为 0(表示没有可用的资源),那么 sem_wait 会阻塞调用线程,直到信号量的值变为非零(即有其他线程或进程调用了 sem_post 来增加信号量的值)。data[size] = "鲁科";sleep(1);size++;sem_post(&lock);//解锁
}
void* task2(void* p){sem_wait(&lock);//加锁data[size] = "张冠";sleep(1);size++;sem_post(&lock);//解锁
}int main()
{sem_init(&lock, 0, 1);//初始化信号量data[size] = "李振";size++;pthread_t id1, id2;pthread_create(&id1, 0, task1, 0);pthread_create(&id2, 0, task2, 0);pthread_join(id1, 0);pthread_join(id2, 0);int i;for(i=0; i<size; i++){printf("%s ", data[i]);}printf("\n");sem_destroy(&lock);
}

2. posix有名信号量: 内核持续 使用sem_open函数创建或打开

// semaphore_lock.h  
#ifndef SEMAPHORE_LOCK_H  
#define SEMAPHORE_LOCK_H  #include <semaphore.h>  
#include <fcntl.h>  
#include <sys/stat.h>  
#include <sys/types.h>  
#include <unistd.h>  #define SEM_NAME "/my_semaphore"  // 初始化信号量  
void init_semaphore();  
// 锁定信号量  
void lock_semaphore();  
// 解锁信号量  
void unlock_semaphore();  
// 清理信号量  
void cleanup_semaphore();  #endif // SEMAPHORE_LOCK_H

// semaphore_lo

这篇关于posix信号量和systemv信号量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079379

相关文章

Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录 POSIX信号量POSIX的操作初始化销毁等待信号量(申请资源)发布信号量(放下资源) 环形队列之生产消费模型 POSIX信号量 POSIX信号量和System V信号量是不同的标准 但是实现的功能是一样的,都是为了解决同步的问题 我们说信号量指的就是资源的数量 在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的 生产者认为空间是资源,因为每次都要

信号与信号量的区别[转]

信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Se

深入理解C语言中的POSIX定时器

引言 在Unix和类Unix系统中,定时器是一种常见的机制,用于在特定时间间隔后执行某些操作。POSIX定时器因其灵活性和功能丰富而被广泛采用。本文将深入探讨POSIX定时器的工作原理、内部机制、使用方法及其在实际开发中的应用。 POSIX定时器基础 POSIX定时器是一种高级定时器接口,它允许用户创建定时器并指定定时器到期时的动作。POSIX定时器支持以下特性: 信号通知:定时器到

使用信号量实现一个限流器:C++实战指南

使用信号量实现一个限流器:C++实战指南 在现代软件开发中,限流器(Rate Limiter)是一种常用的技术,用于控制系统的请求速率,防止系统过载。信号量(Semaphore)是一种强大的同步原语,可以用于实现限流器。本文将详细介绍如何在C++中使用信号量实现一个限流器,并提供完整的代码示例和详细的解释。 什么是限流器? 限流器是一种控制系统请求速率的机制,确保在单位时间内处理的请求数量不

【Linux】多线程:POSIX库、线程管理、线程ID

目录 一、POSIX线程库 二、线程ID 三、动态库加载 四、再谈线程ID 一、POSIX线程库 原生库:指的是操作系统自带的库,如POSIX线程库,在类Unix系统中通常是原生支持的。这些库是操作系统的一部分,提供了系统级的线程管理功能。 【了解】兼容性和标准化 POSIX 标准:POSIX(Portable Operating System Interface)

C++ 信号量

信号量: 在生产者消费者模型中,对任务数量的记录就可以使用信号量来做。当信号量的值小于0时,工作进程或者线程就会阻塞,等待物品到来。当生产者生产一个物品,会将信号量值加1操作 sem_post(&sem)。 这是会唤醒在信号量上阻塞的进程或者线程sem_wait(&sem),它们去争抢物品。 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是⼀个非负的整数计数器,它被用来控制对公共资源的访

【嵌入式】内存未对齐导致程序崩溃(铺获信号量SIGBUS,数值7)

背景 嵌入式平台上,和A组配合,需要把A组提供的二进制文件在调用A组提供接口时传入,因为有多个bin文件,自测的时候选择了其中一个,运行正常。递交给qa测试了。然后qa反馈必现崩溃。懵了。复现的时候还用的之前的bin文件,无法复现。最后看信号量数值和打印日志判断是在调用接口的地方,然后对了下长度,发现奇数。而自己用的偶数大小的bin文件。然后修改4字节对齐后正常了。 问题现象 日志打印提示:

【Linux】消息队列信号量

目录 消息队列 原理 接口 指令 信号量 概念 对于信号量理论的理解 信号量的操作  信号量的指令 消息队列 原理 消息队列提供了一个从一个进程向另外一个进程发送一个数据块的方法,每个数据块都有一个类型。对消息队列的的管理也是先描述,再组织! 接口 我们发现,消息队列和共享内存的接口极其相似,消息队列的属性也保存在ipc_perm结构体中,这个结构以中的第一

网络通信 Posix API的原理与使用

文章目录 1、Posix API简介2、Posix 网络 API简介3、API 具体介绍(1)套接字(socket)socket()bind()listen()accept()connect() (2)数据传输send()recv()sendto()recvfrom() (3)套接字选项setsockopt()getsockopt() (4)套接字关闭close()shutdown()(不推

FreeRTOS线程同步1---信号量

目录 二值信号量 二值信号量相关API函数 一般使用方法为 1.创建二值信号量 2.在一个任务中置为二值释放信号 3.在另一个任务中获取信号 计数信号量 计数型信号量相关 API 函数 使用方法 1.创建计数信号量 2.释放计数信号量 3.获得信号量的当前值 4.释放信号量 互斥信号量 互斥信号量常用API函数 使用方法         信号量是一种解决同