在本章中,我们将学习:
1.简介
2. POSIX信号灯的工作
3. API’用于POSIX信号量
4. POSIX信号量示例
介绍:
在上一章中,我们了解了SysteV信号量。在本章中,我们将学习POSIX信号量。
POSIX信号灯的工作:
1.有两种与信号量有关的操作:等待和发布。
2. Post将使信号量计数增加1。
3.等待:如果信号量值为>0,则信号量递减1。
4.如果信号量值为0,则将阻止调用方,直到信号量值大于0,然后将其减1。
要使用POSIX信号量,请包含以下头文件:
#include <semaphore.h>
信号量声明如下:
sem_t sem;
以下是信号量中使用的一些功能
1. sem_init()
原型:int sem_init(sem_t * sem,int pshared,unsigned int 值);
它将初始化一个信号量。
信号量的初始值为“value”
2. sem_wait()
原型:int sem_wait(sem_t * sem);
此函数递减sem参数所引用的信号量。
3. sem_trywait()
如果信号量,sem_trywait()函数减少信号量’s的值大于零,否则该函数将简单返回。
4. sem_post()
sem_post()函数增加sem参数引用的信号量。
5. sem_destroy()
sem_destroy()函数销毁sem参数所引用的未命名信号量。
POSIX信号量示例:
#include <stdio.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h> sem_t sem; void* thread(void* arg) { //wait sem_wait(&sem); printf("\nEntered critical section\n"); //critical section sleep(4); printf("\nExiting critical section\n"); sem_post(&sem); } int main() { sem_init(&sem, 0, 1); pthread_t t1,t2; pthread_create(&t1,NULL,thread,NULL); sleep(2); pthread_create(&t2,NULL,thread,NULL); pthread_join(t1,NULL); pthread_join(t2,NULL); sem_destroy(&sem); return 0; }
输出:
Entered critical section Exiting critical section Entered critical section Exiting critical section
输出不是:
Entered critical section Entered critical section Exiting critical section Exiting critical section
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |